背景
有關博文:通信報文的構成 。
上一講說到可變頭與消息體要結合不同的報文類型才能夠進行分析(實際上,官方的文檔的介紹順序就是這樣的)
那么,我們就來具體看看有關的報文類型。
在此之前
我們捋一捋完整的通信流程,以及在這個過程中有關的報文。
客戶端到服務端的網絡連接建立后,客戶端發送給服務端的第一個報文必須是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這一塊的要點。
對於報文類型以及通信的流程有了一個初步的認識以后,下一步的學習就容易很多了
