LWT メッセージは、クライアントがオフラインになったかどうかを検出することにはあまり関心がありません (そのタスクは keepAlive メッセージによって処理されます)。LWT メッセージは、クライアントがオフラインになった後に何が起こるかについてのものです。
類推は、本当の最後の意志のそれです: 人が死んだ場合、彼女は死んだ後に取るべき行動を宣言する遺言を作成することができます. 遺言執行者は、その願いに耳を傾け、彼女に代わって執行します。MQTT の世界で例えると、クライアントは、オフラインになった後、ブローカによって代理で送信されるメッセージを宣言する証書を作成できるということです。
架空の例:
重要なデータを送信するセンサーがありますが、非常にまれです。[トピック: '/node/gone-offline', メッセージ: ':id'] の形式で最後の意志ステートメントを定式化しました。:id はセンサーの一意の ID です。また、トピック「node/gone-offline」の緊急サブスクライバーも持っています。これは、そのチャネルでメッセージが公開されるたびに、私の電話に SMS を送信します。
通常の動作中、センサーは、実際のセンサーの読み取り値が散在する定期的な keepAlive メッセージを送信することにより、MQTT ブローカーへの接続を開いたままにします。センサーがオフラインになると、キープアライブがないため、ブローカーへの接続がタイムアウトします。
ここで LWT の出番です。LWT が指定されていない場合、ブローカーは気にせず、単に接続を閉じます。ただし、この場合、ブローカーはセンサーの最後の意志を実行し、LWT メッセージ「/node/gone-offline: :id」を発行します。その後、メッセージは私の緊急サブスクライバーに消費され、SMS 経由でセンサーの ID が通知されるので、何が起こっているのかを確認できます。
要するに:
クライアントがオフラインになり、それ以上発行できないため、クライアントがオフラインになった後に単に接続を閉じる代わりに、LWT メッセージを利用して、クライアントに代わってブローカーによって発行されるメッセージを定義できます。