web-dev-qa-db-ja.com

IoT:MQTTまたはHTTPを使用する必要がありますか?

私は、温度や湿度などの環境から情報を感知して収集するデバイスに取り組んでいます。

デバイスはどの電源にも接続されていませんが、バッテリーと充電用のソーラーパネルがあります。

ほとんどの場合、ほぼディープスリープ状態にあり、データを検知して転送する必要がある場合にのみウェイクアップします。この操作には約1〜2分かかり、その後再びスリープ状態になります。

私はこの分野の専門家ではありませんが、トピックからのメッセージを常に受信するためにデバイスにアクセスできる必要がある場合はMQTTが良いオプションだと思いますが、私のシナリオでは、センサーを読み取り、データを定期的にサーバー。

現在、HTTPを介してデータを送信していますが、MQTTを実装するのが理にかなっているのでしょうか。このシナリオでは、HTTPよりも利点がありますか?

7
zephrax

MQTTとHTTPについては、詳細を調べる必要のある豊富な資料がありますが、ここでは、アプリケーションの重要なポイントをいくつか紹介します。

MQTT

  • MQTTは永続的な接続を可能にし、HTTPを介して大量のリソースを節約できます。これは、SSLを使用している場合に最も関係があります。
  • 少数のメトリックのみを送信する場合、MQTTは一般的にHTTPよりも帯域幅効率が高くなります。
  • MQTTは(ページ全体ではなく)データを配信するように設計されているため、そのpub/subモデルは、保持や遺言など、多くの便利な組み込み機能を提供します。
  • また、MQTTは、暗号化、認証、およびアクセス制御を実装する簡単な方法を提供します。
  • MQTTは、接続が断続的であるか、信頼性が低い可能性がある状況を対象としています。そのさまざまなサービス品質レベルは、データが確実に送信されることを保証する重要な方法を提供します。
  • 大規模なアプリケーションでは、MQTTブローカーは私の経験ではより簡単な管理を提供します。パフォーマンスを測定するための標準化された一連のメトリックがあることが特に気に入っています。
  • MQTTのトピック/サブトピック値の構造は、データを整理するのに役立ち、複数のプロジェクト間で物事をスケールアップしてリソースを共有するのを容易にします。
  • これは個人的な好みかもしれませんが、MQTTプロトコルは、HTTPを使用するよりも理解、トラブルシューティング、およびプログラミングが簡単だと思います。特に、Python Paho MQTTライブラリはシンプルで、うまく機能します。

要約すると、MQTTには、アプリケーションに最適と思われる多くの機能があります。そうは言っても、HTTPを使用してそれらの多くを複製できる可能性がありますが、より多くの作業が必要になります。

HTTP

  • ファイアウォールとの互換性を容易にするため、どこでもほぼサポートされています。これは、制御していないネットワークに展開している場合に重要になる可能性があります。

  • これはより一般的なプロトコルであるため、あなた(およびエンドユーザー)はすでにそれを快適に感じるかもしれません。同様に、セキュリティ保護を容易にするセキュリティモデルをすでに理解しているかもしれません。

  • さまざまなMQTT実装にはいくつかの違いがあり、問題が発生する可能性があります(つまり、私はMosquittoを使用しており、HiveMQのセットアップについて話すときに混乱することがあります)。 HTTPは私をより普遍的なものとして印象づけ、あなたを助けるために利用できる人々のはるかに大きなコミュニティを持っています。

そのため、HTTPにはMQTTと比較していくつかの固有の欠点がありますが、MQTTの特定の機能が魅力的でない場合は、作業が完了し、より実用的である可能性があります。

しかし、これが大規模なプロジェクトである場合は、両方を試して、特定のアプリケーションと環境でいくつかのベンチマークとテストを実行する価値があります。テスト環境をセットアップしていくつかのメトリックを取得することは難しくありません。これが趣味/一回限りのプロジェクトである場合、私はあなたがより快適であるか、より興味深いと思うものを使用します。

出典/参考資料:

http://stephendnicholas.com/posts/power-profiling-mqtt-vs-httpshttps://www.ibm.com/developerworks/community/blogs/sowhatfordevs/entry/ using_mqtt_protocol_advantages_over_http_in_mobile_application_development5?lang = enhttps://medium.com/@shubhanshusingh/http-vs-mqtt-9008d448bf88https://www.slideshare.net/paolopat/mqtt -iot-protocols-comparisonhttps://mobilebit.wordpress.com/2013/05/03/rest-is-for-sleeping-mqtt-is-for-mobile/ - http://bec-systems.com/site/1200/iot-protocols-mqtt-vs-coap-vs-http

15
blp

パフォーマンスの観点とエネルギー消費の両方の観点から、通常のサーバーとRaspberry PiボードからSSLを介して MQTT vs HTTP(REST) をテストしました。結果は、プロセスが実行されているユースケースとデバイスによって異なります。

ユースケースに関しては、特別なテストもあります=> HTTP、HTTPバッチ、またはMQTTを介して多くのメッセージ(複数のプローブ)を配信します。 1つのHTTPリクエストでデータを送信する可能性がある場合、結果は非常に単純です。これが最良のオプションです。 MQTTは2位であり、メッセージごとの配信を伴うHTTPは、MQTTよりも電力効率がはるかに低く、低速です。

2
shal

私はこのゲームを初めて使用しますが、データを収集してデバイスに情報を送信するためのmqttが大好きです。

私はシナプスrf200チップ(自己修復メッシュネットワーク)を使用しており、rf200の1つをesp8266wifiチップにシリアル接続することでブリッジを構築しました。

基本的に、トピックとしてmqtt_inとmqtt_outがあり、c#xamarin iOs/Androidアプリケーションはmqttブローカーに接続し、mqtt_in(rf200メッシュネットワーク内)を使用してrf200から情報を要求し、ノードはmqtt_out(rf200メッシュネットワーク外)を使用して応答します。必要に応じて文字列が解析されるときにすべての情報を収集し、必要なものに変換します。

オーバーヘッドが非常に低く、mqttブローカーのセットアップは非常に簡単です。

1
Mark