MQTT轉送Golang
隨著物聯網(IoT)時代的到來,裝置之間的通訊變得越來越重要。 MQTT(Message Queuing Telemetry Transport)是一種輕量級的消息傳遞協議,它被設計用於跨越低頻寬、高延遲或不可靠的網路連接,為無限制的設備和應用程式提供高效的資料交換機制。在這篇文章中,我們將探討如何使用Golang建立一個MQTT轉發代理伺服器,使得不同的設備能夠透過MQTT協定進行通訊。
我們首先需要安裝Golang。安裝完成後,我們需要安裝paho-mqtt包,它是用於Golang中與MQTT通訊的主要函式庫。我們可以透過以下命令安裝:
go get github.com/eclipse/paho.mqtt.golang
完成後,我們將建立一個名為mqtt-forward的專案資料夾,它包括一個名為main.go的Golang檔案。我們需要將paho-mqtt套件匯入到我們的程式碼中:
import ( "fmt" "github.com/eclipse/paho.mqtt.golang" )
接下來,我們需要設定MQTT客戶端選項:
opts := mqtt.NewClientOptions().AddBroker("tcp://broker.hivemq.com:1883").SetClientID("mqtt-forward")
在此範例中,我們連接到HiveMQ公共MQTT代理,選擇TCP傳輸協議,連接埠號碼為1883,並且將客戶端ID設定為「mqtt-forward」。我們也可以設定MQTT連線的使用者名稱和密碼。
現在,我們將建立一個MQTT客戶端連接,並透過mqtt.Client類型的指標變數client來引用它:
client := mqtt.NewClient(opts) if token := client.Connect(); token.Wait() && token.Error() != nil { panic(token.Error()) } defer client.Disconnect(250)
在此範例中,我們使用mqtt.NewClient(opts)方法建立一個新版本的MQTT客戶端並傳遞選項。連接到MQTT代理伺服器後,我們將關閉MQTT客戶端並等待最多250毫秒,以確保連線已成功關閉。 defer關鍵字用於在函數返回之前執行清理程式碼,這樣可以確保我們在不需要時正確關閉MQTT客戶端。
我們還需要建立一個與MQTT伺服器建立連線後的處理函數,以便接收來自裝置的MQTT訊息。接收到的訊息透過MQTT的主題進行分類。
func onMessageReceived(client mqtt.Client, message mqtt.Message) { fmt.Printf("Received message: %s from topic: %s ", message.Payload(), message.Topic()) }
在此範例中,我們列印所接收到的MQTT訊息的有效負載(有效負載是實際傳輸資料的部分)和主題。
現在,我們需要訂閱MQTT主題。我們可以使用以下程式碼為客戶端新增回呼函數:
if token := client.Subscribe("testtopic/#", byte(0), onMessageReceived); token.Wait() && token.Error() != nil { panic(token.Error()) }
在此範例中,我們訂閱所有以「testtopic」開頭的主題。我們將QoS設為位元組0,這表示我們收到的訊息僅發送一次。
我們完整的main函數如下:
func main() { opts := mqtt.NewClientOptions().AddBroker("tcp://broker.hivemq.com:1883").SetClientID("mqtt-forward") client := mqtt.NewClient(opts) if token := client.Connect(); token.Wait() && token.Error() != nil { panic(token.Error()) } defer client.Disconnect(250) if token := client.Subscribe("testtopic/#", byte(0), onMessageReceived); token.Wait() && token.Error() != nil { panic(token.Error()) } for { time.Sleep(time.Second) } } func onMessageReceived(client mqtt.Client, message mqtt.Message) { fmt.Printf("Received message: %s from topic: %s ", message.Payload(), message.Topic()) }
在程式啟動後,我們將透過TCP在1883埠連接到MQTT代理,並加入了一個回呼函數,並訂閱了以「testtopic ”開頭的所有主題。最後,我們進入了一個無限循環中,以便我們可以保持連線並持續收到MQTT訊息。
我們可以使用以下命令執行Golang程式:
go run main.go
綜上所述,我們已經介紹如何使用Golang和paho-mqtt套件來建立MQTT轉送代理伺服器。透過了解如何連接到MQTT代理伺服器,並訂閱某些主題以捕獲來自不同設備的消息,我們現在已經能夠從設備中心化的方式獲取MQTT訊息,這對於構建IOT應用程式是非常有幫助的。
以上是mqtt轉發golang的詳細內容。更多資訊請關注PHP中文網其他相關文章!