當前位置:
首頁 > 知識 > MQTT協議的初淺認識之推送訂閱

MQTT協議的初淺認識之推送訂閱

背景

了解MQTT怎麼建立連接之後,現在重點來了解MQTT怎麼推送,訂閱兩個方面。


概念

先見一張圖:

MQTT協議的初淺認識之推送訂閱

這張圖是依舊借鑒HiveMQ的圖,來講述MQTT協議的推送和訂閱的過程。推送和訂閱,我們很容易理解。這裡裡面的推送客戶端和訂閱客戶端,在上篇文章MQTT協議的初淺認識之連接建立中也都提到過,都是屬於MQTT的客戶端。這裡面有一個比較陌生的概念是Topic,即話題這個概念。

話題

這個東西在MQTT裡面很靈活,客戶端訂閱的對象其實也就是話題。話題主要有話題主題+正斜杠組成。如下:

MQTT協議的初淺認識之推送訂閱

話題其實就是由話題主題+正斜桿,組成的一個字元串,客戶端訂閱了這個話題字元串之後,就可以接收這個MQTT推送過來關於這個話題的消息。中間件也是根據話題,來分發從推送客戶端推送到中間件的消息。

話題通配符

單級:+

表示不接收間隔多個話題級別,如下圖:

MQTT協議的初淺認識之推送訂閱

匹配的消息結果,如下:

MQTT協議的初淺認識之推送訂閱

多級:#

表示接收多級間隔話題,如下:

MQTT協議的初淺認識之推送訂閱

匹配消息,如下:

MQTT協議的初淺認識之推送訂閱

開頭:$

表示以什麼開頭的消息,這個不常用。

推送消息

MQTT協議的初淺認識之推送訂閱

MQTT客戶端可以在連接到中間件後立即發布消息。MQTT中間件利用基於話題的消息進行過濾。每條消息必須包含一個話題,中間件可以使用該話題將消息轉發給感興趣的客戶端。通常,每條消息都有包含一個的MQTT載荷與數據有關。客戶端決定了有效負載的結構。發送客戶端(發布者)決定是否要發送二進位數據,文本數據,甚至是完整的數據。XML或JSON。

參考說明:

  • packetId:消息id
  • topicName:話題標識
  • qos

    :通訊質量級別,分為三個級別,對應著三種不同的通訊方式,這個很重要的。
  • retainFlag:此標誌定義中間件是否將消息保存為指定話題的最後一個默認消息值。當新客戶端訂閱某個話題時,他們會收到該主題上保留的最後一條消息。
  • payload:載荷,業務內容就在這裡。
  • dupFlag:是否已經重複發送消息標識。

當客戶端向MQTT中間件發送消息以進行發布時,中間件會讀取該消息,確認消息(根據QoS級別)並處理該消息。中間件處理消息包括確定哪些客戶已訂閱該話題並將消息發送給他們。

MQTT協議的初淺認識之推送訂閱

最初發布消息的客戶端只關心向中間件發送PUBLISH消息。一旦中間件收到PUBLISH消息,中間件就有責任將消息傳遞給所有訂閱客戶端。發布客戶端不會獲得有關是否有人對發布的消息感興趣或有多少訂閱客戶端從中間件接收消息的任何反饋。


訂閱消息

MQTT協議的初淺認識之推送訂閱

客戶端訂閱消息,相對於推送消息結構要簡單的多,主要包括兩個部分:

  • packetId:消息id;
  • qos+topic:通訊質量級別和話題數組

中間件收到客戶端端的訂閱SUBSCRIBE消息後,中間件會回答SUBACK消息。


SUBACK消息

MQTT協議的初淺認識之推送訂閱

參數說明:

  • packetId:消息id
  • returnCode:返回代碼

返回代碼說明:

Return CodeReturn Code Response0Success – Maximum QoS 01Success – Maximum QoS 12Success – Maximum QoS 2128Failure

整個訂閱過程,如圖:

MQTT協議的初淺認識之推送訂閱

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 程序員小新人學習 的精彩文章:

使用mobilenet訓練自己的數據

TAG:程序員小新人學習 |