MQTT 5.0 新特性 |(一) 屬性與載荷

MQTT 5.0 協議相比 MQTT 3.1.1 增長了不少屬性,這些屬性分佈於報文的可變頭部 ( Variable Header ) 和有效載荷 ( Payload ) 中。 MQTT 5.0 協議中攜帶有效載荷的報文有 CONNECT 報文,PUBLISH 報文,SUBSCRIBE 報文,SUBACK 報文,UNSUBSCRIBE 報文和 UNSUBACK 報文。 PUBLISH 報文的有效載荷負責存儲消息內容,與 MQTT 3.1.1 協議相同。服務器

CONNECT 報文3d

CONNECT 報文的可變頭部新增的屬性有:cdn

在 CONNECT 報文的 Payload 中,部分字段發生了變化,遺囑消息(Will Message)變成了遺囑載荷(Will Payload)。Payload 中新增了遺囑屬性(Will Properties),用於定義遺囑消息的行爲。blog

新增的遺囑屬性有:ip

CONNACK 報文qt

CONNACK 報文沒有 Payload,在可變頭部中包含的屬性有:it

PUBLISH 報文io

PUBLISH 報文可變頭部的屬性有:class

PUBACK, PUBREC, PUBREL, PUBCOMP, SUBACK, UNSUBACK 報文lazyload

PUBACK, PUBREC, PUBREL, PUBCOMP, SUBACK, UNSUBACK 都具有如下三個屬性:

SUBSCRIBE 報文

SUBSCRIBE 報文的屬性一樣存在可變頭部中。

MQTT 5.0 中 SUBSCRIBE 報文中的 Payload 包含了訂閱選項(Subscription Options)。

訂閱選項(Subscription Options)的第 0 位和第 1 位表示 QoS 最大值。該字段給出了服務器能夠發送給客戶端應用消息的最大 QoS 等級。若是 QoS 值爲 3,就會觸發協議錯誤。 訂閱選項第 2 位表示非本地選項(No Local)。若是值爲 1,應用消息就不會發布給訂閱發佈主題的發佈者自己,若是在共享訂閱中將該選項設置爲 1 的話,就會觸發協議錯誤。 訂閱選項的第 3 位表示保留爲已發佈(Retain As Published)。若該值爲 1,服務器須將轉發消息的 RETAIN flag 設爲與接收到的 PUBLISH 報文的 RETAIN flag 一致。若該值爲 0,無論接收到的 PUBLISH 報文中的 RETAIN flag 是何值,服務器都需將轉發消息的 RETAIN flag 置爲 0。 訂閱選項的第 4 第 5 位表示保留處理 (Retain Handling)。該選項是用來控制保留消息 (retained message) 的發送。當保留處理的值爲 0 時,服務器須將保留消息轉發到與訂閱匹配的主題上去。當該值爲 1 時,若是訂閱已經不存在了,那麼服務器須要將保留消息轉發給與訂閱匹配的主題上,可是若是訂閱存在,服務器就沒法再轉發保留消息。當該值爲 2 時,服務器不轉發保留消息。 訂閱選項的第 6 第 7 位是預留給將來使用的。若是有效載荷的任何一個預留位非零,那麼服務器就會將該報文視爲格式錯誤的報文。

UNSUBSCRIBE 報文 UNSUBSCRIBE 報文僅有兩個屬性:屬性長度和用戶屬性。 UNSUBSCRIBE 報文的載荷相比 SUBSCRIBE 的載荷要簡單不少,它僅僅只是包含主題過濾器的列表,並不包含各類各樣的訂閱選項。 服務器就會將該報文視爲格式錯誤的報文。

DISCONNECT 報文(新增)

DISCONNECT 報文是 MQTT 5.0 新增的報文,它的引入意味着 mqtt broker 擁有了主動斷開鏈接的能力。DISCONNECT 報文所具有的屬性有:

相關文章
相關標籤/搜索