golang mqtt 发布和订阅
golang mqtt publish and subscribe
有人知道我在哪里可以获得一些示例 MQTT 客户端 Go (golang) 代码,它可以在无限循环中发布和订阅吗?
我在 MacO 上与 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
我查看了 GoDocs 以获取有关如何保持连接打开的一些提示,但似乎没有任何相关内容。我当然可以做一个无限循环
在 'subscribe' 上,但这似乎效率低下。
我查看了 GoDocs 以获取有关如何保持连接打开的一些提示,但似乎没有任何相关内容。我当然可以对 'subscribe' 进行无限循环,但这似乎效率低下。
好的。在 找到解决方案。 https://github.com/eclipse/paho.mqtt.golang/blob/master/cmd/stdoutsub/main.go。
本质上,我必须打开一个订阅频道。
这是新代码:
package main
import (
"fmt"
MQTT "github.com/eclipse/paho.mqtt.golang"
"os"
"os/signal"
"syscall"
)
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
c := make(chan os.Signal, 1)
signal.Notify(c, os.Interrupt, syscall.SIGTERM)
opts := MQTT.NewClientOptions().AddBroker("tcp://localhost:1883")
opts.SetClientID("mac-go")
opts.SetDefaultPublishHandler(f)
topic := "nn/sensors"
opts.OnConnect = func(c MQTT.Client) {
if token := c.Subscribe(topic, 0, f); token.Wait() && token.Error() != nil {
panic(token.Error())
}
}
client := MQTT.NewClient(opts)
if token := client.Connect(); token.Wait() && token.Error() != nil {
panic(token.Error())
} else {
fmt.Printf("Connected to server\n")
}
<-c
}
有人知道我在哪里可以获得一些示例 MQTT 客户端 Go (golang) 代码,它可以在无限循环中发布和订阅吗?
我在 MacO 上与 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
我查看了 GoDocs 以获取有关如何保持连接打开的一些提示,但似乎没有任何相关内容。我当然可以做一个无限循环 在 'subscribe' 上,但这似乎效率低下。
我查看了 GoDocs 以获取有关如何保持连接打开的一些提示,但似乎没有任何相关内容。我当然可以对 'subscribe' 进行无限循环,但这似乎效率低下。
好的。在 找到解决方案。 https://github.com/eclipse/paho.mqtt.golang/blob/master/cmd/stdoutsub/main.go。 本质上,我必须打开一个订阅频道。 这是新代码:
package main
import (
"fmt"
MQTT "github.com/eclipse/paho.mqtt.golang"
"os"
"os/signal"
"syscall"
)
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
c := make(chan os.Signal, 1)
signal.Notify(c, os.Interrupt, syscall.SIGTERM)
opts := MQTT.NewClientOptions().AddBroker("tcp://localhost:1883")
opts.SetClientID("mac-go")
opts.SetDefaultPublishHandler(f)
topic := "nn/sensors"
opts.OnConnect = func(c MQTT.Client) {
if token := c.Subscribe(topic, 0, f); token.Wait() && token.Error() != nil {
panic(token.Error())
}
}
client := MQTT.NewClient(opts)
if token := client.Connect(); token.Wait() && token.Error() != nil {
panic(token.Error())
} else {
fmt.Printf("Connected to server\n")
}
<-c
}