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 报文所具有的属性有:

相关文章
相关标签/搜索