直接MQTTと比較したMQTT over WebSocketのメリットは何ですか?
プロジェクトでMQTTを使用することを検討しているので、直接MQTTではなくWebSocketではなくMQTTを選択する人がいる理由を知りたいです。
Webapps(ページ内)から直接メッセージをパブリッシュ/サブスクライブする場合にのみ、WebsocketでMQTTを実行する必要があります。
基本的には、すべてに対して純粋なMQTTを実行し、実際に必要な場合にのみwebsocketを追加します。
すべてのブラウザなし言語について、MQTTクライアントライブラリはネイティブMQTTのみを使用します。 Javascriptには、純粋なMQTTライブラリと、websocketを使用するページライブラリのPahoの両方があります。
編集:ファイアウォールトンネリングのユースケースは、Websocket経由でMQTTを使用する正当な理由です。
Websocket経由でMQTTを使用する2つの主な理由(事実上、HTTP/HTTPSを経由することを意味します):
上記を必要としないか心配しない場合は、「直接」MQTTを使用します。
Websocket上のMQTTは、特定のWebページが送信側または受信側のMQTTクライアントである場合に最適です。
Websocketを介したMQTTの機能の概要は、 here にあります。
MQTTは、以下をサポートするプロトコルです。
デバイスによっては、実装が利用可能です。
ブラウザ:Websocketを使用します。 Websocketは、ブラウザに全二重通信を確立する機能を提供します。 MQTT機能を実装するJavaScriptライブラリがあります。 Eclipse Paho JavaScript Client を参照してください。
Android:これらは、Javaで記述されたMQTTクライアントライブラリです。 Eclipse Paho Android Service
そのため、この機能を使用するデバイスに依存します。標準と仕様については、 MQTTバージョン3.1.1 をご覧ください。
これが役に立てば幸いです。
乾杯!
Webソケット上のMQTTは、443および80のトラフィックのみを許可するファイアウォールの背後でアプリケーションが実行されている場合にも役立ちます。また、ファイアウォールのポリシーを制御することはできません。
Websocket上のMQTTを使用すると、すべてのブラウザーをMQTTデバイスにすることができます。
MQTTのパブリッシュ/サブスクライブパターンにより、正しいトピックにサブスクライブしている限り、イベント(文字どおり世界中のどこでも)が発生したときに、ブラウザーにリアルタイムでプッシュされます。
WebSocket上のMQTTの場合、websockets接続はMQTTプロトコルの外部パイプを形成します。サーバー/ブローカーはMQTTパケットをwebsocketsパケットに入れて、クライアント/サーバーに送信します。クライアント/サーバーは、websocketsパケットからMQTTパケットを解凍し、通常のMQTTパケットとして処理します。
さらに、モノのインターネットに大きな影響を与えます。詳細については、次のドキュメントをお読みください。
MQTTブローカー:
MQTTクライアントの対応物はMQTTブローカーです。ブローカーは、すべてのパブリッシュ/サブスクライブプロトコルの中心にあります。実装に応じて、ブローカーは最大数千の同時接続MQTTクライアントを処理できます。
MQTT Client:クライアントについて話すとき、ほとんど常にMQTTクライアントを意味します。パブリッシャーとサブスクライバーの両方がMQTTクライアントです。パブリッシャーとサブスクライバーのラベルは、クライアントが現在メッセージをパブリッシュしているか、メッセージをサブスクライブしているかを示します(パブリッシュおよびサブスクライブ機能は同じMQTTクライアントに実装することもできます)。
WebSocket: MQTT Essentialsで、MQTTは制約のあるデバイスや信頼性の低いネットワークに最適であることを学びました。また、非常に低いオーバーヘッドでメッセージを送信するのにも最適です。携帯電話のブラウザで直接または一般にMQTTメッセージを直接送受信するのは非常に良いことです。これは、MQTT over WebSocketsによって可能です。
サードパーティのプロトコルを使用できます。 PAHO、EMQTT、VerneMQ。