ホームページ  >  記事  >  バックエンド開発  >  mqtt フォワード golang

mqtt フォワード golang

PHPz
PHPzオリジナル
2023-05-22 13:54:08706ブラウズ

MQTT Forwarding 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 に設定します。これは、受信したメッセージが 1 回だけ送信されることを意味します。

完全な 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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。