MQTT學習之二
阿新 • • 發佈:2021-06-23
MQTT 的 Topic 有層級結構,並且支援萬用字元 +
和 #
:
+
是匹配單層的萬用字元。比如news/+
可以匹配news/sports
,news/+/basketball
可匹配到news/sports/basketball
。#
是一到多層的萬用字元。比如news/#
可以匹配news
、news/sports
、news/sports/basketball
以及news/sports/basketball/x
等等。
MQTT 的主題是不要預先建立的,釋出者傳送訊息到某個主題、或者訂閱者訂閱某個主題的時候,Broker 就會自動建立這個主題。
Keepalive:在 CONNECT 報文裡可設定 Keepalive 欄位,來設定保活心跳包 PINGREQ/PINGRESP 的傳送時間間隔。當長時間無法收到裝置的 PINGREQ 的時候,Broker 就會認為裝置已經下線。
CleanSession:對於那些想要在重新上線後,重新收到離線期間錯過的訊息的裝置,MQTT 設計了持久化連線:在 CONNECT 報文裡可設定 CleanSession 欄位為 False,則 Broker 會為終端儲存錯過的資訊:
- 裝置所有的訂閱
- 還未被裝置確認的 QoS1 和 QoS 2訊息
- 裝置離線時錯過的訊息
Last Will:讓 Broker 在發現裝置異常下線的情況下,幫助裝置釋出一條遺願訊息到指定的主題。實際上在某些 MQTT 伺服器的實現裡 (比如 EMQ X),裝置上線或下線的時候 Broker 會通過某些系統主題釋出裝置狀態更新,更符合實際應用場景。