有人知道我在哪里可以获取一些示例MQTT客户端Go(golang)代码,该代码可以在无限循环中执行发布和订阅操作吗?
我正在使用MacOS上运行的Mosquitto代理进行消息传递。
更详细地说...
- 从网络中获取一条消息(主题)
- 根据该消息计算某些内容
- 将计算结果发送回网络(主题)
这是我正在使用的代码:
package main
import (
"fmt"
MQTT "github.com/eclipse/paho.mqtt.golang"
"os"
"time"
)
var knt int
var f MQTT.MessageHandler = func(client MQTT.Client, msg MQTT.Message)
{
fmt.Printf("MSG: %s\n", msg.Payload())
text:= fmt.Sprintf("this is result msg #%d!", knt)
knt++
token := client.Publish("nn/result", 0, false, text)
token.Wait()
}
func main() {
knt = 0
opts := MQTT.NewClientOptions().AddBroker("tcp://localhost:1883")
opts.SetClientID("mac-go")
opts.SetDefaultPublishHandler(f)
c := MQTT.NewClient(opts)
if token := c.Connect(); token.Wait() && token.Error() != nil {
panic(token.Error())
}
if token := c.Subscribe("nn/sensors", 0, nil); token.Wait() &&
token.Error() != nil {
fmt.Println(token.Error())
os.Exit(1)
}
time.Sleep(3 * time.Second)
} //end of main
我查看了Go文档,希望能找到一些提示来保持连接的开放状态,但是似乎没有相关的内容。我可以在“subscribe”上进行无限循环,但这似乎效率低下。
我查阅了Go文档,但并未找到与保持连接开放有关的有用信息。虽然可以通过在“subscribe”上进行无限循环来实现,但效率不高。