MQTT 協議學習:003-MQTT通信流程介紹


--- title: protocol-app-mqtt-3-how-mqtt-make-communication date: 2020-02-03 14:18:51 categories: tags: - mqtt - protocol ---

背景

有關博文:通信報文的構成

上一講說到可變頭與消息體要結合不同的報文類型才能夠進行分析(實際上,官方的文檔的介紹順序就是這樣的)

那么,我們就來具體看看有關的報文類型。

在此之前

我們捋一捋完整的通信流程,以及在這個過程中有關的報文。

客戶端到服務端的網絡連接建立后,客戶端發送給服務端的第一個報文必須CONNECT, 連接服務端報文。

服務端發送CONNACK, 確認連接請求報文響應從客戶端收到的CONNECT報文。服務端發送給客戶端的第一個報文必須CONNACK

PUBLISH,發布消息報文是指從客戶端向服務端或者服務端向客戶端傳輸一個應用消息。

  • 在 QoS 0 等級,沒有報文 響應。
  • 在 QoS 1 等級,PUBACK, 發布確認報文是對QoS 1等級的PUBLISH報文的響應。
  • 在 QoS 2 等級,情況稍微不同:
    • PUBREC, 發布收到報文是對QoS 2等級的PUBLISH報文的響應。它是QoS 2等級協議交換的第二個報文。
    • PUBREL, 發布釋放報文是對PUBREC報文的響應。它是QoS 2等級協議交換的第三個報文。
    • PUBCOMP, 發布完成報文是對PUBREL報文的響應。它是QoS 2等級協議交換的第四個也是最后一個報文。

顯然,在QoS 2 等級中,第一個報文是 PUBLISH

客戶端向服務端發送SUBSCRIBE, 訂閱主題報文用於創建一個或多個訂閱。為了將應用消息轉發給與那些訂閱匹配的主題,服務端發送PUBLISH報文給客戶端。SUBSCRIBE報文也(為每個訂閱)指定了最大的QoS等級,服務端根據這個發送應用消息給客戶端。

服務端發送SUBACK, 訂閱確認報文給客戶端,用於確認它已收到並且正在處理SUBSCRIBE報文。

客戶端發送UNSUBSCRIBE, 取消訂閱報文給服務端,用於取消訂閱主題。

服務端發送UNSUBACK, 取消訂閱確認報文給客戶端用於確認收到UNSUBSCRIBE報文。

客戶端發送PINGREQ, 心跳請求報文給服務端的。用於確認通信對方沒有斷開連接。

服務端發送PINGRESP, 心跳響應報文響應客戶端的PINGREQ報文。表示服務端還活着。

DISCONNECT, 斷開連接報文是客戶端發給服務端的最后一個控制報文。表示客戶端正常斷開連接。

報文的簡單流程圖

注意,這個流程圖中關於 Qos 的時序描述細節上不夠。我們會在下一章專門講解Qos這一塊的要點。

%% 時序圖 sequenceDiagram participant 發布者 participant 服務器 participant 訂閱者 Note right of 發布者: 發布者主動連接-> 發布者 ->> + 服務器: CONNECT 服務器 -->> - 發布者: CONNACK Note left of 訂閱者: <-訂閱者主動連接 訂閱者 ->> + 服務器: CONNECT 服務器 -->> - 訂閱者: CONNACK par Note right of 發布者: 心跳 發布者 ->> 服務器: PINGREQ 服務器 -->> 發布者: PINGRESP and 訂閱者 ->> 服務器: PINGREQ 服務器 -->> 訂閱者: PINGRESP end Note right of 發布者: 發布消息(Qos 0) 發布者 ->> + 服務器: PUBLISH Qos0 Note left of 訂閱者: 收到消息(Qos 0) 服務器 ->> - 訂閱者: PUBLISH Qos0 Note right of 發布者: 發布消息(Qos 1) 發布者 ->> + 服務器: PUBLISH Qos1 服務器 -->> - 發布者: PUBACK Qos1 Note left of 訂閱者: 接收消息(Qos 1) 服務器 ->> + 訂閱者: PUBLISH Qos1 訂閱者 -->> - 服務器: PUBACK Qos1 Note right of 發布者: 發布消息(Qos 2) 發布者 ->> 服務器: PUBLISH Qos2 服務器 -->> 發布者: PUBREC Qos2 發布者 ->> 服務器: PUBREL Qos2 服務器 -->> 發布者: PUBCOMP Qos2 Note right of 發布者: 接收消息(Qos 2) 服務器 ->> 訂閱者 : PUBLISH Qos2 訂閱者 -->> 服務器: PUBREC Qos2 服務器 ->> 訂閱者: PUBREL Qos2 訂閱者 -->> 服務器: PUBCOMP Qos2 par Note right of 發布者: 斷開連接 發布者 ->> 服務器: DISCONNECT and 訂閱者 ->> 服務器: DISCONNECT end

對於報文類型以及通信的流程有了一個初步的認識以后,下一步的學習就容易很多了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM