首頁  >  文章  >  後端開發  >  golang 實作 mqtt

golang 實作 mqtt

WBOY
WBOY原創
2023-05-19 09:06:372137瀏覽

近年來,隨著物聯網技術的發展,MQTT協定在物聯網通訊領域中逐漸佔據了重要地位。 MQTT(Message Queuing Telemetry Transport)是一種基於發布/訂閱(pub/sub)模式的輕量級通訊協定。 MQTT協定具有簡單、高效、可靠、靈活等特點,可適用於手機、嵌入式系統、PC等各種設備,尤其適用於物聯網領域。本文將介紹如何使用Go語言實作MQTT協定。

  1. MQTT協定介紹

MQTT協定是針對低頻寬、高延遲、不穩定網路環境下的通訊需求而設計的一種協定。 MQTT引入了發布/訂閱模式的思想,即訊息發布者(Publisher)與訊息訂閱者(Subscriber)之間的訊息傳遞並不直接發生聯繫,而是透過中間的代理伺服器(Broker)來實現。

MQTT協定的訊息格式如下:

## ——— ——— ——— ——— ——— ——— ——— ——— ——— ——— — —— ——— ——— ———

|固定頭部| 可變頭| 訊息體|
——— ——— ——— ——— ——— ——— —— — ——— ——— ——— ——— ——— ——— ———

固定頭:包含了訊息類型、QoS等資訊。

可變頭部:包含了一些二級協定的固定訊息,如客戶端ID、主題名稱等。
訊息體:即發布或訂閱的具體內容。

    Go語言實作MQTT
Go語言是一種新興的程式語言,以出色的並發性和高效能著稱,最近也成為了物聯網領域的熱門語言之一。 Go語言提供了一些優秀的網頁程式庫,如TCP、UDP、HTTP等等,完全可以利用Go語言的優秀特性和這些函式庫來輕鬆實現MQTT協定。

2.1 安裝mqtt庫

Go語言提供了多個mqtt庫,如Paho MQTT、Eclipse Paho等等。本文將使用Eclipse Paho程式庫,透過以下命令安裝:

go get github.com/eclipse/paho.mqtt.golang

2.2 連接MQTT服務端

在使用Eclipse Paho程式庫前,需要先連接到MQTT代理伺服器。連線時需提供MQTT代理伺服器位址、客戶端ID、使用者名稱、密碼等資訊。

MQTT庫提供了ClientOptions類型,透過此類型的SetXXX方法設定連接選項,如:

opts := mqtt.NewClientOptions().AddBroker("tcp://localhost:1883").SetClientID("go-mqtt")
opts.SetUsername("user")
opts.SetPassword("password")
client := mqtt.NewClient(opts)

以上程式碼中,AddBroker方法設定MQTT代理伺服器位址,SetClientID方法設定客戶端ID ,SetUsername和SetPassword方法設定連接認證資訊。

2.3 發佈訊息

在MQTT協定中,訊息的發佈端即發佈訊息的用戶端,發佈訊息時需要提供訊息的主題和內容。 Eclipse Paho程式庫提供了Publish方法,用於發送訊息。如下所示:

token := client.Publish("topic", 0, false, "hello world")
token.Wait()

以上程式碼中,client.Publish方法第一個參數為主題名稱,第二個參數為QoS級別,第三個參數為Retain標誌(為true表示伺服器會保存最後一條相應主題的訊息,並在新訂閱該主題時發送它),第四個參數為訊息體。

2.4 訂閱訊息

在MQTT協定中,訊息的訂閱端需要提供需要訂閱的主題,並且需要提供一個回呼函數,以便在訊息到達時處理訊息。 Eclipse Paho函式庫提供了Subscribe方法,用於訂閱訊息。如下所示:

token := client.Subscribe("topic", 0, func(client mqtt.Client, msg mqtt.Message) {
    fmt.Printf("Received message: %s from topic: %s
", msg.Payload(), msg.Topic())
})
token.Wait()

以上程式碼中,client.Subscribe方法第一個參數為主題名稱,第二個參數為QoS級別,第三個參數為回呼函數,該回呼函數會在訊息到達時執行。

    總結
透過上述範例程式碼,我們可以看到,使用Go語言和Eclipse Paho函式庫實作MQTT協定非常簡單。 Go語言擁有良好的並發效能和網路程式庫,可以輕鬆實現各種網路通訊協定。 MQTT協議作為一種輕量級的通訊協議,在物聯網領域擁有廣泛的應用,透過Go語言來實現MQTT協議能夠為物聯網應用提供更有效率、安全和可靠的通訊方式,相信在物聯網發展的未來,MQTT協定和Go語言在物聯網領域的應用將越來越廣泛。

以上是golang 實作 mqtt的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
上一篇:golang轉移nodejs下一篇:golang轉移nodejs