首頁 > 後端開發 > Golang > 主體

mqtt轉發golang

PHPz
發布: 2023-05-22 13:54:08
原創
686 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!