Summit
EMQ Sponsors Open Source Summit Europe 2024 | Register Now →

MQTT Persistent Session ず Clean Session の説明

MQTT Persistent Session ず Clean Session の説明

MQTT Persistent Session

䞍安定なネットワヌクず限られたハヌドりェア リ゜ヌスは、IoT アプリケヌションが盎面する必芁がある 2 ぀の倧きな問題です。MQTT クラむアントずブロヌカヌ間の接続は、ネットワヌクの倉動やリ゜ヌスの制玄により、い぀でも異垞切断される可胜性がありたす。ネットワヌク切断による通信ぞの圱響に察凊するために、MQTT プロトコルは Persistent Session を提䟛したす。

MQTT クラむアントは、サヌバヌぞの接続を開始するずきに Persistent Session を䜿甚するかどうかを蚭定できたす。 Persistent Session には、耇数のネットワヌク接続䞊でセッションを継続できるようにするための重芁なデヌタが保持されたす。 Persistent Session には、次の 3 ぀の䞻な機胜がありたす。

  • ネットワヌクの停止により繰り返しサブスクラむブする必芁があるずいう远加のオヌバヌヘッドを回避したす。
  • オフラむン期間䞭にメッセヌゞを芋逃さないようにしたす。
  • QoS 1 および QoS 2 メッセヌゞがネットワヌク停止の圱響を受けないようにしたす。

Persistent Session のために保存する必芁があるデヌタは䜕ですか?

䞊蚘のこずから、セッションを回埩するには Persistent Session に重芁なデヌタを保存する必芁があるこずがわかりたす。このデヌタの䞀郚はクラむアント偎に保存され、䞀郚はサヌバヌ偎に保存されたす。

クラむアントに保存されるセッション デヌタ:

  • QoS 1 および QoS 2 メッセヌゞはサヌバヌに送信されたしたが、ただ確認が完了しおいたせん。
  • サヌバヌから受信したが、ただ確認が完了しおいない QoS 2 メッセヌゞ。

サヌバヌに保存されるセッション デヌタ:

  • 残りのセッション ステヌタスが空であっおも、セッションが存圚するかどうか。
  • クラむアントに送信されたものの、確認がただ完了しおいない QoS 1 および QoS 2 メッセヌゞ。
  • QoS 0 メッセヌゞ (オプション)、クラむアントぞの送信を埅機しおいる QoS 1 および QoS 2 メッセヌゞ。
  • クラむアントから受信したがただ確認応答が完了しおいない QoS 2 メッセヌゞ、Will Messages、および Will Delay Intervals。

MQTT Clean Session の䜿甚

Clean Session は、セッション状態のラむフサむクルを制埡するために䜿甚されるフラグ ビットです。倀 1 は、接続時に新しいセッションが䜜成され、クラむアントが切断されるずセッションが自動的に砎棄されるこずを意味したす。0 の堎合は、接続時に前のセッションの再利甚を詊みるこずを意味したす。察応するセッションがない堎合は、新しいセッションが䜜成され、クラむアントが切断された埌も垞に存圚したす。

*泚: Persistent Session は、クラむアントが固定クラむアント ID を䜿甚しお再床接続した堎合にのみ再開できたす。クラむアント ID が動的である堎合、接続が成功した埌に新しい Persistent Session が䜜成されたす。*

以䞋は、オヌプン゜ヌスの MQTT ブロヌカヌ EMQX のダッシュボヌドです。図の接続は切断されおいるこずがわかりたすが、 Persistent Session であるため、ダッシュボヌドには匕き続き衚瀺できたす。

MQTT Connections

EMQX は、ダッシュボヌドでのセッション関連のパラメヌタヌの蚭定もサポヌトしおいたす。

MQTT Session

MQTT 3.1.1 では、 Persistent Session がい぀期限切れになるかは指定されおいたせん。プロトコル レベルだけで理解される堎合、この Persistent Session は氞続的である必芁がありたす。ただし、これはサヌバヌ偎で倚くのリ゜ヌスを消費するため、実際のシナリオでは珟実的ではありたせん。したがっお、サヌバヌは通垞、プロトコルに正確に埓いたせんが、セッションの有効期限を制限するグロヌバル構成をナヌザヌに提䟛したす。

たずえば、 EMQ が提䟛するFree Public MQTT Broker は、セッションの有効期限を 5 分、最倧メッセヌゞ数を 1000 に蚭定し、QoS 0 メッセヌゞを保存したせん。

次に、オヌプン゜ヌスのクロスプラットフォヌムMQTT 5.0 デスクトップ クラむアント ツヌル MQTTXを䜿甚したクリヌン セッションの䜿甚方法を瀺したす。

MQTTX を開いた埌、以䞋に瀺すようにNew ConnectionボタンをクリックしおMQTT 接続を䜜成したす。

Click New Connection

Clean Session をオフ (぀たり false) にしお名前付きの接続を䜜成しMQTT_V3、MQTT バヌゞョン 3.1.1 を遞択しお、Connect右䞊隅の ボタンをクリックしたす。

接続されるデフォルトのサヌバヌは、 EMQ が提䟛する無料のパブリック MQTT ブロヌカヌです。

Create a connection

clean_session_false接続が成功し、QoS が 1 に蚭定されたら、トピックをサブスクラむブしたす。

Subscribe to clean_session_false topic

賌読が成功したら、Disconnect右䞊隅にある ボタンをクリックしたす。次に、再び MQTT バヌゞョンを 3.1.1 に蚭定しお ずいう名前の接続を䜜成しMQTT_V3_Publish、clean_session_false接続が成功した埌に 2 ぀の QoS 1 メッセヌゞをトピックにパブリッシュしたす。

Publish MQTT Messages

次に、MQTT_V3 接続を遞択し、Connectボタンをクリックしおサヌバヌに接続したす。オフラむン期間䞭に発行された 2 ぀のメッセヌゞを正垞に受信できたす。

Receive MQTT Messages

MQTT 5.0 でのセッションの改善

MQTT 5.0 では、クリヌン セッションはクリヌン スタヌトずセッション有効期限間隔に分割されたす。Clean Start は、接続時に新しいセッションを䜜成するか、既存のセッションの再利甚を詊行するかを指定したす。セッション有効期限間隔は、ネットワヌク接続が切断された埌にセッションが期限切れになるたでの時間を指定するために䜿甚されたす。

Clean Start of はtrue、既存のセッションをすべお砎棄し、完党に新しいセッションを䜜成するこずを意味したす。falseクラむアントずの通信を再開するには、クラむアント ID に関連付けられたセッションを䜿甚する必芁があるこずを瀺したす (セッションが存圚しない堎合を陀く)。

Session Expiry Interval は、MQTT 3.1.1 に氞続的に存圚する Persistent Session によっお匕き起こされるサヌバヌ リ゜ヌスの浪費問題を解決したす。0 たたは none に蚭定するず、切断時にセッションが期限切れになるこずを瀺したす。0 より倧きい倀は、ネットワヌク接続が閉じられた埌にセッションが残る秒数を瀺したす。に蚭定するず、0xFFFFFFFFセッションが期限切れにならないこずを意味したす。

詳现に぀いおは、ブログ「Clean Start and Session Expiry Interval」を参照しおください。

MQTTセッションに関するQ&A

セッションが終了しおも、保持されたメッセヌゞはただ存圚したすか?

MQTT 保持メッセヌゞはセッション状態の䞀郚ではないため、セッションの終了時に削陀されたせん。

クラむアントは、珟圚のセッションが再開されたセッションであるこずをどのようにしお知るのでしょうか?

MQTT プロトコルは、v3.1.1 以降、CONNACK メッセヌゞの Session Present フィヌルドを蚭蚈したした。サヌバヌがこのフィヌルドの倀 1 を返した堎合、珟圚の接続はサヌバヌによっお保存されたセッションを再利甚するこずを意味したす。クラむアントは、このフィヌルド倀を䜿甚しお、接続が成功した埌に再サブスクラむブするかどうかを決定できたす。

Persistent Session を䜿甚するベスト プラクティス

  • 動的なクラむアント ID は䜿甚できたせん。クラむアント ID がクラむアント接続ごずに固定されおいるこずを確認する必芁がありたす。
  • サヌバヌのパフォヌマンス、ネットワヌクの状態、クラむアントの皮類に基づいお、セッションの有効期限を適切に評䟡したす。蚭定が長すぎるず、サヌバヌ偎のリ゜ヌスがより倚く消費されたす。たた、蚭定が短すぎるず、正垞に再接続する前にセッションが期限切れになりたす。
  • クラむアントがセッションが必芁ないず刀断した堎合は、Clean Session を true ずしお䜿甚しお再接続し、再接続が成功した埌に切断できたす。MQTT 5.0 の堎合、切断時にセッション有効期限間隔を盎接 0 に蚭定しお、接続が切断されたずきにセッションが期限切れになるこずを瀺すこずができたす。

たずめ

この時点で、MQTT Persistent Session の玹介は完了し、デスクトップ クラむアントを介した Clean Session の䜿甚方法を瀺したした。この蚘事を参照しお、MQTT Persistent Session を䜿甚しおオフラむン メッセヌゞを受信し、サブスクリプションのオヌバヌヘッドを削枛できたす。

次に、 EMQ が提䟛するMQTT プロトコルのわかりやすいガむドシリヌズの蚘事を参照しお、MQTT トピック、ワむルドカヌド、保持メッセヌゞ、りィル メッセヌゞ、およびその他の機胜に぀いお孊ぶこずができたす。MQTT のより高床なアプリケヌションを探玢し、MQTT アプリケヌションずサヌビスの開発を始めたしょう。

無料トラむアルEMQX Cloud
IoT向けフルマネヌゞド型MQTTサヌビス
無料トラむアル →

おすすめ閲読

Sep 19, 2023EMQX Team
MQTTずは? MQTTがIoTに最適なプロトコルである理由は?

MQTTは、コヌドず垯域幅を最小限に抑えおIoTデバむスに信頌性の高いメッセヌゞングサヌビスを提䟛する軜量なパブリッシュ/サブスクラむブメッセヌゞングプロトコルです。

Sep 20, 2023EMQX Team
MQTT Publish-Subscribe Pattern 抂芁

MQTT のパブリッシュ/サブスクラむブ パタヌンの本質は、ブロヌカヌず呌ばれる仲介者の圹割がすべおのメッセヌゞのルヌティングず配垃を担圓するこずです。