MQTTネットワークでの次の接続シナリオの結果はどうなりますか?


7

MQTTでは、CONNECTメッセージで接続を開始するのはクライアントです。

MQTT接続パッケージのパラメーター

パケットの最初のフィールドは次のclientIdとおりです。

クライアント識別子(短いClientId)は、MQTTブローカーに接続する各MQTTクライアントの識別子です。識別子という言葉がすでに示唆しているように、ブローカーごとに一意である必要があります。ブローカーはこれを使用して、クライアントとクライアントの現在の状態を識別します。(画像と引用はここから取得されます。)

次の状況で、クライアントXとYの2つのクライアントがあるとします。

  1. ブローカーがローンチしましたが、まだクライアントはありません。
  2. Xは正常にclient-1IDでブローカーに接続しますX。ユーザー名はです。
  3. ここで、Yはclient-1IDとして接続を試みますY。ユーザー名はです。

何が起こるか?

  1. clientIdに基づいて、ブローカーは、X が異常な動作である接続試行繰り返し実行すると考えます。
  2. 異常なことは起こりません。Yは別のユーザー名を使用しているため、正常に接続します
  3. 異常なことは起こりません。ブローカーは、Y拒否します与えられたのclientIdがすでに使用されているような接続の試みを。

回答:


6

場合clientidMQTTで、同じで、スペックは、あなたがそれらを同じクライアントであることを考慮しなければならないと言います!おそらく、Yは、使用して接続しなければならないIdX切断されるべきです。

この部分はドキュメントからです:

検証が成功した場合、サーバーは次の手順を実行します。

  1. ClientIdがサーバーに既に接続されているクライアントを表す場合、サーバーは既存のクライアントを切断する必要があります[MQTT-3.1.4-2]。

  2. サーバーは、セクション3.1.2.4 [MQTT-3.1.4-3]で説明されているCleanSessionの処理を実行する必要があります。

  3. サーバーは、ゼロの戻りコード[MQTT-3.1.4-4]を含むCONNACKパケットでCONNECTパケットを確認する必要があります。

  4. メッセージ配信を開始し、監視を維持します。

見て、このマニュアルを参照して詳細については。


2
これは正しい答えのようですが、仕様の関連部分をリンクして引用すると役立つ場合があります(重要な部分は、「ClientIdがすでにサーバーに接続されているクライアントを表す場合、サーバーは既存のクライアントを切断する必要があります」)。
Aurora0001

3
なんとか見逃してしまいましたが意外です。有害なクライアントは、ブローカーに他のクライアントを強制的に切断させることができますか?
Bence Kaulics 16
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.