2016-09-02 4 views
2

もしそうなら、非TCPネットワークで何がうまくいかないかの例を知っていますか?私はいくつか出くわしたMQTT学ぶTCP/IPはMQTTに必須ですか?

はMQTTはTCP/IPスタックに依存しているという事実を言及しています。例えば、mqtt.orgから:MQTT自身が明示的に TCP/IPスタックを期待一方

センサネットワークのためのMQTTは、非TCP/IP ネットワーク上の組み込み機器を対象としています。

参考資料を読むと、そのようなものは見つかりません。さらに、QoSフィールドがあり、信頼できる配信に使用でき、0以外の値はTCP/IPネットワークでは実質的に役に立たない。今は、TCPソケットではなく、UNIXのパイプ、ドメイン、またはUDPソケットを使用してMQTT接続を確立することを妨げるものは何もありません。

答えて

7

MQTTは順序付けされた信頼性の高い配信を必要とするだけで、TCPである必要はありません。 SCTPはうまく動作しますが、UDPは、大量のPUBLISHパケットが複数のUDPパケットで構成されていることを保証する方法がないため、順序通りに完了しません。

TCPの信頼性に関して、理論的に言えば、実際にはアプリケーションがwrite()を呼び出し、成功したリターンを受け取ったときに、実際にデータがコンピュータからリモートホスト。すべてwrite()(またはsend())は、データをカーネルバッファにコピーします。その時点で、それ以上の制御はありません。

メッセージは、アプリケーションレベルでリモートホストに到達したことを確認するための唯一の方法は、リモートホストの応答を持つことです。

+0

私はそれを試したことはありませんが、SOCK_STREAM型のUnixソケットがTCPに十分近いので、うまく動作するはずだと思いました。私が考えることができる唯一の利点はUnixの権限です。 – njh

+0

はい、私は目的のためにUNIXソケットを除外しませんでした。 – ralight

関連する問題