MQTTは常に接続され、4Gデータロード


10

私は、4G / WiFiルーター/モデムを介してブローカー(蚊)に接続されている何千ものMQTTクライアントを含むIoTプロジェクトに取り組んでいます。10台未満のクライアントが同じルーターに接続され、ルーターは異なる場所(異なる都市)から来ています。

現在、クライアントはほとんどなく、常にブローカーに接続されています。この議論から、1000ユニット以上に成長しても問題ないことを知っています。

私の質問は、4G接続のトラフィック負荷についてです。エンドユーザーは、これらのすべての「チャネル」が開かれ、使用されない状態でのデータ消費を恐れています。 アクティビティがない場合、キープアライブパケットのみが送信されることを理解している限り、MQTTのドキュメントでこの情報を確実に見つけることはできません。

パケットがパブリッシュされていないときにトラフィックが無視できると想定できますか?

回答:


6

MQTT仕様には、キープアライブトランザクションを構成するPINGREQおよびPINGRESPパケットの詳細がリストされています。

それぞれのサイズはわずか2バイトなので、完全なキープアライブイベントでは合計4バイトを使用します。接続が切断されたことを知る必要がある速さに基づいて、クライアントごとにキープアライブパケットが送信される頻度を制御できるため、実際にメッセージがパブリッシュされていないときに使用されるデータの量を完全に制御できます。

データの負荷をさらに軽減したい場合は、10台のデバイスが接続する4Gルーターの前に別のブローカーを実行して、中央ブローカーにブリッジすることができます。これにより、キープアライブパケットの数が、クライアントごとではなく、4Gルーターごとに1つに減ります。これには、リンクがダウンした場合に10個のローカルデバイスが互いにメッセージをやり取りし続けることができるという利点があり、保持されたメッセージ/ Last WillおよびTestementメッセージを使用して、個々のクライアントがダウンしたときに追跡できます。


中間ブローカーを使用することは良いアドバイスですが、この特定のケースには適合しないかもしれません。ただし、知っておくと便利です。
マーク

とにかく、私はPINGREQ / RESPの動作を知っていましたが、実際のアクティビティがない場合(つまり、ユーザーアプリケーションによって開始された場合)に交換される唯一のパケットであることがわかりませんでした。私はあなたの答えからこれを推測することができましたが、ドキュメントはそれを明示的に述べていないようです。
マーク

キープアライブタイマーは、パケットが受信されるたびにリセットされます。仕様のどこでこれが頭上にあるのか覚えていません
hardillb

2
ローカルブローカーを導入するという提案は、メッセージあたり2バイトについて話さない場合にさらに意味があることを指摘したいと思いますが、TCP / IPのため、メッセージあたり42バイトに近いので、1つのpingサイクルで84バイトです。
xwoker

1
@Markメッセージが送信されていない場合に送信されるのはPingパケットのみであるという事実は、この表の後の文によって暗示されます。docs.oasis
open.org
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.