2016-09-01 9 views
2

私はMQTTプロトコルを勉強していますし、スペックの非常に最初の行で矛盾があるようです:MQTT QoSの使用目的は何ですか?

プロトコルTCP/IP上で動作する、または注文した提供 他のネットワークプロトコルの上には、無損失、双方向接続。その機能 は、次のとおりです。

[...] メッセージ配信のためのサービスの

三資質:メッセージはの最善の努力に応じ を配信している「最高1回」

  • 、動作環境。 メッセージが失われる可能性があります。このレベルは、たとえば アンビエントセンサーデータで使用することができます。個々の読み取り値 が失われた場合は、すぐ次のものが公開されます。・
  • " で少なくとも1回"メッセージは到着することが保証されていますが、重複すると が発生します。・
  • 「正確に1回」は、メッセージが正確に一度 に到着することが保証されています。このレベルは、たとえば、重複したメッセージや紛失したメッセージによって正しく の料金が適用されるような請求書 システムで使用できます。

MQTTだけロスレスているネットワークプロトコルを介して実行することができた場合、QoSの損失のあるレベル(レベル0)を提供するの意味は何ですか?

TCPプロトコルが失われたメッセージの再送信を処理するので、それを提供することすらできないと思います。 MQTT-SNは、non-TCP、信頼性の低いネットワークで動作するように意図されています。

(注:レベル1「少なくとも1回」は、TCPに既にこの保証が含まれているために意味がありませんが、他のロスレスプロトコルがある可能性があるため使用される)

答えて

5

厳密に言えば、TCP/IP層で承認されたTCPフレームは、必ずしもアプリケーション層で、パケットで行う必要があるものが効果的に行われたことを意味しません。

MQTT QoS 0パケットが失われた場合、TCPパケットがブローカに送信される(実際にはクライアントの観点からACKされます)が、ブローカが途中でクラッシュしますすべての購読済みのクライアントにメッセージを配信します。

MQTTトピックにサブスクライブしている100,000のクライアントがあるとします。サブスクライブしたクライアントにデータを転送するにはしばらく時間がかかり、プロセスの途中でブローカーが停止する可能性があります。パブリッシャの観点からは、メッセージは実際にブローカに公開されていますが、一部のユーザはそのメッセージについて決して聞くことができないため、実際にはメッセージの消失があります。

関連する問題