文章目錄
前言
PUBREL報文是對PUBREC報文的響應。它是QoS 2等級協議交換的第三個報文。
PUBREL – 發佈釋放(QoS 2,第二步)
PUBREL固定報頭
PUBREL固定報頭的第3,2,1,0位是保留位,必須被設置爲0,0,1,0。服務端必須將其它的任何值都當做是不合法的並關閉網絡連接。
剩餘長度字段
表示可變報頭的長度,用變長字節整數編碼。
MQTT3.1.1中PUBREL報文這個值等於2.即值爲
000000010
可變報頭
PUBREL報文的可變報頭按順序包含以下字段:所確認的PUBREC報文標識符,PUBREL原因碼,屬性(Properties)。
MQTT 3.1.1沒有原因碼和屬性相關的字段
PUBREL原因碼(MQTT 5)
可變報頭第3字節是PUBREL原因碼。如果剩餘長度爲2,則表示使用原因碼0x00 (成功)。
PUBREL原因碼
客戶端或服務端發送PUBREL報文時必須設置其中一種PUBREL原因碼。當原因碼爲0x00(成功)且沒有屬性(Properties)時,原因碼和屬性長度可以被省略。在這種情況下,PUBREL剩餘長度爲2。
PUBREL屬性(MQTT 5)
屬性長度
PUBREL報文可變報頭中的屬性長度被編碼爲變長字節整數。如果剩餘長度小於4,則表示沒有屬性長度字段。
原因字符串
31 (0x1F)Byte,原因字符串(Reason String)標識符。
跟隨其後的是UTF-8編碼的字符串,表示此次響應相關的原因。此原因字符串(Reason String)是爲診斷而設計的可讀字符串,不應該被接收端所解析。
發送端使用此值向接收端提供附加信息。如果加上原因字符串之後的PUBREL報文長度超出了接收端指定的最大報文長度(Maximum Packet Size),則發送端不能發送此原因字符串。包含多個原因字符串將造成協議錯誤(Protocol Error)。
用戶屬性
38 (0x26)Byte,用戶屬性(User Property)標識符。
跟隨其後的是UTF-8字符串對。此屬性可用於提供包括診斷信息或關於PUBREL的信息。如果加上用戶屬性之後的PUBREL報文長度超出了接收端指定的最大報文長度(Maximum Packet Size),則發送端不能發送此屬性 。用戶屬性(User Property)允許出現多次,以表示多個名字/值對,且相同的名字可以多次出現。
PUBREL載荷
PUBREL報文沒有有效載荷。
PUBREL行爲
在之後的博文關於“操作行爲”的內容會提到