golang mqtt publish and subscribe

前端 未结 1 1686
一生所求
一生所求 2021-02-08 07:06

Does anybody know where I can get some example MQTT client Go (golang) code that does both publish and subscribe in an infinite loop ?

I am messaging with a Mosquitto br

1条回答
  •  借酒劲吻你
    2021-02-08 07:09

    I looked through the GoDocs for some hint as to how to keep the connections open but nothing seems pertinent. I can certainly do an infinite loop over the 'subscribe' but that seems inefficient.

    Ok. Found a solution at . https://github.com/eclipse/paho.mqtt.golang/blob/master/cmd/stdoutsub/main.go. Essentially, I had to open up a channel for the subscribe. Here is the new code:

    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
    }
    

    0 讨论(0)
提交回复
热议问题