前言
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行爲
在之後的博文關於“操作行爲”的內容會提到