MQTT協議(三)——控制報文之發布消息(PUBLISH)、發布確認(PUBACK)、發布收到(PUBREC)、發布釋放(PUBREL)和發布完成(PUBCOMP)


一、消息發布

PUBLISH控制報文不光是客戶端發送給服務端,也能服務端發送給客戶端,就是個傳遞應用消息的。

1.固定頭

推送的固定頭報文類型是3。

DUP是重發標志,如果DUP標志被設置為0,表示這是客戶端或服務端第一次請求發送這個PUBLISH報文。如果DUP標志被設置為1,表示這可能是一個早前報文請求的重發。

Qos是服務質量等級,有三種狀態。

 

 RETAIN是保留位,保留位的意義上一篇已經闡述。值得注意的是如果想清除一個在服務端有保留有效荷載的topic,只要發送一個保留位為1切有效荷載為零字節的publish報文就行,

服務端會把這個空報文轉發給訂閱者,並清除這個topic的保留信息,后續再關注這個topic的客戶端不會再收到消息了。

2.可變頭

可變報頭按順序包含主題名和報文標識符。

主題名就是平時說的topic,推送訂閱都是依靠這個標識,可以理解為其他mq的topic。

報文標識符就是報文的id,服務端用來唯一標識報文的屬性,只有當QoS等級是1或2時,報文標識符(Packet Identifier)字段才能出現在PUBLISH報文中,因為這倆需要服務端答復

客戶端,如果沒有這個標識,服務端不知道要針對哪條報文進行答復。

可變頭示例:

 

 示例中的主題名為 “a/b”,長度等於3,報文標識符為 “10”

3.有效載荷

有效載荷包含將被發布的應用消息。數據的內容和格式是應用特定的。有效載荷的長度這樣計算:用固定報頭中的剩余長度字段的值減去可變報頭的長度。包含零長度有效載荷的PUBLISH報文是合法的。

注意:根據固定頭中的qos等級,接收到publish報文端需要給予響應。

這里補充一下qos:

qos0:最多就發送一次,你別告訴我你收沒收到,你找到訂閱這個主題的你就推就行。

 

 

qos1:至少發送一次,發送完你告訴我你收沒收到(PUBACK),如果你不告訴我,我就一直發。

 

 

qos2:確保一次送達,我給你發(PUBLISH),你給我回一個你收到了(PUBREC),我再給你發一個你確定你收到了嗎(PUBREL),你再給我回一個收到了別發了求你了(PUBCOMP)

 

 

 二、發布確認

PUBACK報文是對QoS 1等級的PUBLISH報文的響應。

1.固定頭

沒啥說的,類型4.

2.可變頭

可變頭就倆個字節。就是報文標識符。

 

 

 3.有效載荷

三、發布收到

PUBREC報文是對QoS等級2的PUBLISH報文的響應。它是QoS 2等級協議交換的第二個報文。

1.固定頭

沒啥說的,類型5.

2.可變頭

可變頭就倆個字節。就是報文標識符。

 

 3.有效載荷

四、發布釋放

PUBREL報文是對PUBREC報文的響應。它是QoS 2等級協議交換的第三個報文。

1.固定頭

沒啥說的,類型6.

2.可變頭

可變頭就倆個字節。就是報文標識符。

 

 3.有效載荷

五、發布完成

PUBCOMP報文是對PUBREL報文的響應。它是QoS 2等級協議交換的第四個也是最后一個報文。

1.固定頭

沒啥說的,類型7.

2.可變頭

可變頭就倆個字節。就是報文標識符。

 

 3.有效載荷

 


免責聲明!

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



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