MQTTブローカーに接続する
概要で説明されたように、接続メソッドは以下の目的で使用されます:
クライアントクラスを作成する
ブローカーに接続する
翻訳テキスト:
呼び出されるとMQTTブローカーに接続し、クライアントクラスを返します。
Source Text: e.g. Translation Text: 例えば
通常、メソッドに渡す必要がある多くのオプションがあり、そのオプションは通常、JavaScriptオブジェクトとして作成されます。
例えば、ユーザー名とパスワード認証およびクリーンセッションを使用するには、次のオプションを使用します。
MQTTプロトコルは、 CONNACK
メッセージで接続を認識します。
これによりクライアントで on_connect
イベントが発生し、次のようにリスナーを作成することで調査できます:
リスナーは connect
イベントを待ち、コールバック関数を呼び出します。上記の例では、クライアントが接続するとメッセージを印刷するだけです。
on_connect イベントは、connected というフラグを true に設定します。このフラグには client.connected を使用してアクセスできます。
URL
接続メソッドのURLには、ブローカーのIPアドレスまたはドメイン名が含まれています。例示された以下では、プロトコルであるMQTTが接頭辞として付けられています。
MQTT+SSLを使用して接続する場合、プロトコルの接頭辞はmqttsです。また、ws(ウェブソケット)とwss(ウェブソケット+SSL)の接頭辞もあります。
接続ポートはURLの一部としても渡すことができます。例えば
しかし、通常はオプションの一部として設定されます。オプションの設定は、両方が存在する場合にURLの設定を上書きします。
オプション
接続メソッドに渡すことができる多くのオプションがあり、それらはここにリストされています。
このチュートリアルでは、知っておくべき最も重要で一般的なもののいくつかについて説明します。
クライアントID
各クライアントには固有のIDが必要です。通常、既知のプレフィックスを使用してランダムなIDを生成します。
接頭辞はACL(アクセス制御リスト)で使用できるため、現在 ACLを使用していなくても、接頭辞を使用することが良い習慣です。
私が使用しているコードは次のようになっています:
プロトコルバージョン
この設定は接続パケットに設定されており、正しく設定することを確認してください。現在のデフォルトはMQTTv3.1.1(protocolVersion:4)です。MQTTv5を使用する場合はprotocolVersion:5を使用してください。
最後の遺言メッセージの設定
最後の遺言メッセージは接続パケットの一部です。遺言メッセージはMQTTv5で拡張されました。次のスクリーンショットはすべての可能な設定を示していますが、プロパティ属性はMQTT v5でのみ利用可能です。
設定例
接続オプションは次のようになります
MQTT v5 プロパティ
MQTTv5を使用する際には、接続を制御するためにブローカーに追加情報を送信できます。
トピックエイリアスの数を制限したり、クライアントに送信されるメッセージのサイズを制限するなどが可能です。利用可能なオプションはすべてドキュメントに記載されています。
使用方法は以下の通りです:
SSLを使用して接続する
SSLを使用して接続するには、CA 証明書が必要です。証明書に不慣れな場合は、「Mosquitto MQTT Broker SSL 設定を自分の証明書を使用して行う方法」を参照してください。
ファイルからCA 証明書を読み取る必要があるため、次のように始めます
接続オプションについては、以下のようなものを使用します:
証明書の一般名とTCP/IP 接続でブローカーにアクセスする際に使用される名前が一致しない場合に、 rejectUnauthorized
オプションはトラブルシューティングに役立ちます。
つまり、証明書にドメイン名を使用していますが、IPアドレスを使用して接続しています。
SSL、ws、およびwssは異なるポートを使用するため、ポートにも注意してください。
接続コールは次のようになります:
ウェブソケット接続
ウェブソケットを使用して接続するには:
SSL 上でのWebsocketsには、私たちは使用します。
証明書の設定は、以前に示されたmqttsと同じです。
複数のブローカーへの接続
接続ごとにクライアントを作成する必要があります。以下のコードがこれを示しています:
原文: 訳文:
mqtt.Client(streamBuilder, options)
オプションを使用して新しいクライアントを作成することは可能であるはずですが、動作させることができず、インターネット上で例も見つけることができませんでした。これは私が引き続き試みることです。さらに、connect コールを使用して新しいクライアントを作成することは可能ですが、ブローカーには接続しないでください。ドキュメントには次のように記載されています:
manualConnect:コンストラクタがconnectを呼び出すのを防ぎます。この場合、mqtt.connectが呼び出された後、client.connectを手動で呼び出す必要があります。
この機能を動かすことができず、クライアントコード内でそのオプションを見つけることもできませんでした。再度、さらに調査が必要です。
一般的な質問と回答
Q1: クライアントは複数のブローカーに接続できますか?
A1: 各接続に対して新しいクライアントを作成する必要があります。
Q2:クライアントは公開と購読ができますか?
はい
Q3:接続が失敗した場合、クライアントは自動的に再接続しますか?
A3: はい、それがデフォルトの動作です。
Q4: NQTTv5のプロパティを使用していますが、うまく機能していないようですか?
接続パケットでプロトコルバージョンの設定を忘れている可能性があります。
Q5:私のクライアントは接続と切断を繰り返していますが、その理由は何ですか?
A5: あなたは他のクライアントと同じclientIdを使用している可能性があります。これはテスト時に多くのテストスクリプトがclientIdをハードコードするため、よく発生します。
Last updated