MQTT協議的初淺認識之推送訂閱
背景
了解MQTT怎麼建立連接之後,現在重點來了解MQTT怎麼推送,訂閱兩個方面。
概念
先見一張圖:
這張圖是依舊借鑒HiveMQ的圖,來講述MQTT協議的推送和訂閱的過程。推送和訂閱,我們很容易理解。這裡裡面的推送客戶端和訂閱客戶端,在上篇文章MQTT協議的初淺認識之連接建立中也都提到過,都是屬於MQTT的客戶端。這裡面有一個比較陌生的概念是Topic,即話題這個概念。
話題
這個東西在MQTT裡面很靈活,客戶端訂閱的對象其實也就是話題。話題主要有話題主題+正斜杠組成。如下:
話題其實就是由話題主題+正斜桿,組成的一個字元串,客戶端訂閱了這個話題字元串之後,就可以接收這個MQTT推送過來關於這個話題的消息。中間件也是根據話題,來分發從推送客戶端推送到中間件的消息。
話題通配符
單級:+
表示不接收間隔多個話題級別,如下圖:
匹配的消息結果,如下:
多級:#
表示接收多級間隔話題,如下:
匹配消息,如下:
開頭:$
表示以什麼開頭的消息,這個不常用。
推送消息
MQTT客戶端可以在連接到中間件後立即發布消息。MQTT中間件利用基於話題的消息進行過濾。每條消息必須包含一個話題,中間件可以使用該話題將消息轉發給感興趣的客戶端。通常,每條消息都有包含一個的MQTT載荷與數據有關。客戶端決定了有效負載的結構。發送客戶端(發布者)決定是否要發送二進位數據,文本數據,甚至是完整的數據。XML或JSON。
參考說明:
- packetId:消息id
- topicName:話題標識
qos
:通訊質量級別,分為三個級別,對應著三種不同的通訊方式,這個很重要的。- retainFlag:此標誌定義中間件是否將消息保存為指定話題的最後一個默認消息值。當新客戶端訂閱某個話題時,他們會收到該主題上保留的最後一條消息。
- payload:載荷,業務內容就在這裡。
- dupFlag:是否已經重複發送消息標識。
當客戶端向MQTT中間件發送消息以進行發布時,中間件會讀取該消息,確認消息(根據QoS級別)並處理該消息。中間件處理消息包括確定哪些客戶已訂閱該話題並將消息發送給他們。
最初發布消息的客戶端只關心向中間件發送PUBLISH消息。一旦中間件收到PUBLISH消息,中間件就有責任將消息傳遞給所有訂閱客戶端。發布客戶端不會獲得有關是否有人對發布的消息感興趣或有多少訂閱客戶端從中間件接收消息的任何反饋。
訂閱消息
客戶端訂閱消息,相對於推送消息結構要簡單的多,主要包括兩個部分:
- packetId:消息id;
- qos+topic:通訊質量級別和話題數組
中間件收到客戶端端的訂閱SUBSCRIBE消息後,中間件會回答SUBACK消息。
SUBACK消息
參數說明:
- packetId:消息id
- returnCode:返回代碼
返回代碼說明:
Return CodeReturn Code Response0Success – Maximum QoS 01Success – Maximum QoS 12Success – Maximum QoS 2128Failure
整個訂閱過程,如圖:
TAG:程序員小新人學習 |