【Go后台开发第三课】实现goframe框架与emqx的通信连接及测试,实现物联网的开关控制应用

时间:2024-10-10 08:40:36

学习目标:

实现go语言下goframe框架与EMQX搭建的MQTT Server的连接、订阅、推送、断开等操作

开发工具:

Win10 + goland

正式操作:

1、goLand下创建新功能 goframeMqttTestProject,开始安装gf框架(golang版本 >= 1.11)

  1. go get -u -v /gogf/gf
  2. go mod init
  3. go mod edit -require /gogf/gf@latest
  4. go mod tidy

2、创建文件,添加如下hello代码

  1. package main
  2. import (
  3. "fmt"
  4. "/gogf/gf"
  5. )
  6. func main() {
  7. ("hello world!")
  8. // 打印GF版本
  9. ()
  10. }

3、运行成功,结果如下。

4、开始搭建一个Web项目测试

  1. package main
  2. import (
  3. "/gogf/gf/frame/g"
  4. "/gogf/gf/net/ghttp"
  5. )
  6. func main() {
  7. s := ()
  8. ("/", func(r *){
  9. ("Welcome GoFrame!")
  10. })
  11. ("/hello", func(r *){
  12. ("Hello World!")
  13. })
  14. (80)
  15. ()
  16. }

测试验证:

在网页下访问 localhost/,输出 Welcome GoFrame!

在网页下访问 localhost/hello,输出 Hello World!

 

5、调用一下上一节测试的在gin框架下写的代码,注意微修改:在import引用时,对"github.com/eclipse/"前面加了mqtt,否则报错。

  1. package main
  2. import (
  3. "fmt"
  4. mqtt "/eclipse/"
  5. "time"
  6. )
  7. //订阅回调函数;收到消息后会执行它
  8. var f = func(client , msg ) {
  9. ("TOPIC: %s\n", ())
  10. ("MSG: %s\n", ())
  11. }
  12. func main() {
  13. //此处我是以ws方式接入的,请添你自己代理服务器的公网ip ,这里只是举例
  14. opts := ().AddBroker("ws://47.101.136.63:8083/mqtt")
  15. ("mqttx_2e81508d")
  16. (2 * time.Second)
  17. (f)
  18. (1 * time.Second)
  19. (false)
  20. c := (opts)
  21. if token := (); () && token.Error() != nil {
  22. panic(token.Error())
  23. }
  24. //订阅
  25. if token := ("go-mqtt/sample", 2, nil); () && token.Error() != nil {
  26. (token.Error())
  27. }
  28. time.Sleep(1 * time.Second)
  29. //发布
  30. if token := ("go-mqtt/sample", 2, false,"博主的第一篇博客"); () && token.Error() != nil {
  31. (token.Error())
  32. }
  33. //取消订阅
  34. if token := ("go-mqtt/sample"); () && token.Error() != nil {
  35. (token.Error())
  36. }
  37. //关闭链接
  38. (250)
  39. time.Sleep(20 * time.Second)
  40. }

运行成功