1. 程式人生 > 其它 >MQTT學習之二

MQTT學習之二

MQTT 的 Topic 有層級結構,並且支援萬用字元 +#:

  • + 是匹配單層的萬用字元。比如 news/+ 可以匹配 news/sportsnews/+/basketball 可匹配到 news/sports/basketball
  • # 是一到多層的萬用字元。比如 news/# 可以匹配 newsnews/sportsnews/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 會通過某些系統主題釋出裝置狀態更新,更符合實際應用場景。