物聯網之MQTT3.1.1和MQTT5協議 (8) PUBCOMP報文

前言

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

PUBCOMP – 發佈完成(QoS 2,第三步)

固定報頭

在這裏插入圖片描述

剩餘長度字段
表示可變報頭的長度,用變長字節整數編碼。

MQTT3.1.1中PUBREL報文這個值等於2.即值爲000000010

PUBCOMP可變報頭

PUBCOMP報文可變報頭按順序包含以下字段:所確認的PUBREL報文標識符,PUBCOMP原因碼,屬性。

在這裏插入圖片描述

PUBCOMP原因碼

可變報頭第3字節是PUBCOMP原因碼。如果剩餘長度爲2,則表示使用原因碼0x00(成功)。

在這裏插入圖片描述

服務端或客戶端發送PUBCOMP報文時必須設置一種PUBCOMP原因碼。當原因碼爲0x00(成功)且沒有屬性(Properties)時,原因碼和屬性長度可以被省略。在這種情況下,PUBCOMP剩餘長度爲2。

PUBCOMP屬性

屬性長度

PUBCOMP報文可變報頭中的屬性長度被編碼爲變長字節整數。如果剩餘長度小於4,則表示沒有屬性長度字段。

原因字符串

31 (0x1F)Byte,原因字符串(Reason String)標識符。

跟隨其後的是UTF-8編碼的字符串,表示此次響應相關的原因。此原因字符串(Reason String)是爲診斷而設計的可讀字符串,不應該被接收端所解析。

發送端使用此值向接收端提供附加信息。如果加上原因字符串之後的PUBCOMP報文長度超出了接收端指定的最大報文長度(Maximum Packet Size),則發送端不能發送此原因字符串。包含多個原因字符串將造成協議錯誤(Protocol Error)。

用戶屬性

38 (0x26)Byte,用戶屬性(User Property)標識符。

跟隨其後的是UTF-8字符串鍵值。此屬性可用於提供診斷信息或關於其他信息。如果加上用戶屬性之後的PUBCOMP報文長度超出了接收端指定的最大報文長度(Maximum Packet Size),則發送端不能發送此屬性 。用戶屬性(User Property)允許出現多次,以表示多個名字/值對,且相同的名字可以多次出現。

PUBCOMP載荷

PUBCOMP報文沒有有效載荷。

PUBCOMP行爲

在之後的博文關於“操作行爲”的內容會提到

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章