MQTTv5(MQTT5.0)新特性介绍

更新时间:2023-07-25 04:27:28 阅读: 评论:0

MQTTv5(MQTT5.0)新特性介绍
MQTT v5 (MQTT 5.0) 新特性介绍
格式suicide is painless>欧盟的缩写
⾸先,协议上,增加了⼀个 Property字段,正是这个字段,使得 MQTT 5.0 可以⽀持众多的新特性。⽽在MQTT 3.1.1中,MQTT没有任何可以拓展的地⽅,限制了MQTT拓展功能的可能性。
request/respon 模式
(1)A publish ⼀个消息,消息topic假设是"topicA",该消息 通过Property携带了Respon Topic,假设该字段是"topicrespon"。(2)订阅了"topicA"的接收端B(有可能有多个)收到了该消息。
(3)B处理完"topicA"后,会publish ⼀个 topic 名字是 “topicrespon” 的消息。该消息有可能是A订阅的,也有可能是其他⼈订阅的。
(4)A publish 的消息,可能还会携带Correlation Data属性,假设其值是"msgrespon",这样B发publish的消息就是(“topicrespon”, “msgrespon”)。
Server redirection
Server可以发送 CONNACK 或者 DISCONNECT,其 Reason Codes 可以是0x9c或者0x9d,表⽰Client需要往另⼀个Server发送请求。0x9C 类似 HTTP 的 302, 0x9d 类似 HTTP的 301。
CONNACK 或者 DISCONNECT 可以通过 Property携带Server redirection,其值可以告诉Client往哪个Server发送请求,类似HTTP 的"Location"⾸部。
AUTH控制报⽂
MQTT 单纯通过 CONNECT可能⽆法提供⾜够的信息给Server进⾏⾝份认证,所以 Server 在收到 MQTT 的 CONNECT 后,回复 AUTH 控制报⽂给Client,Client接着也⽤ AUTH包发送附加信息,Server直到 认证完成后,才会发送 CONNACK。
Topic Alias
类似HTTP2的头部压缩效果,当然,没有同HPACK那么复杂的东西。
中国合伙人票房我们知道,PUBLISH消息的时候,需要携带 topic和message,其中topic往往是固定的,那么我们只需要第⼀次发送完整的 topic,并且通过Property中携带Topic Alias告知对端下次这个PUBLISH的topic会使⽤Topic Alias中的值代替,Topic Alias的值是⼀个整数类型的值。
client 通过 CONNECT 中 Topic Alias Maximum 告知 Server⾃⼰能处理的最多的 Topic Alias 个数。
Server 通过 CONNACK中 Topic Alias Maximum 告知 Client⾃⼰能处理的最多的 Topic Alias 个数。
如果当前PUBLISH消息的topic长度不为0,那么接受⽅需要解析 Topic Alias 中的值,并且 将topic和该值进⾏映射。
如果当前PUBLISH消息的topic为0,那么接受⽅需要解析 Topic Alias 中的值,⽤该值去查找对应的topic。
Ur Property
tomriddle⾃定义属性,可以添加两端约定的数据。例如可以加⼊类似HTTP的 "Header:value"信息。MQTT本⾝没有类似HTTP的HOST信息,我们可以使⽤Ur Property特性让MQTT⽀持。
Session Expiry Interval
之前的MQTT版本,当cleanssion为0时,rver和client会尝试保存ssion信息(sub信息、PUBLISH状态等),但是有个问
题,rver 不知道需要保存这个ssion多久。MQTT 5.0 就 在 Property字段中增加了Session Expiry Interval属性来告知rver这个ssion希望被保存多久。
systeminfo
如果MQTT 5.0 不携带 Session Expiry Interval或者 Session Expiry Interval设置为0,rver和client则不会保存ssion信息。
如果Session Expiry Interval设置为0xffffffff,则表⽰ssion永远不会⽼化。
当然,这个字段是需要配合Clean Start使⽤的,如果Clean Start为1,那么 Session Expiry Interval设置多⼤都⽆意义。
CONNECT、CONNACK、DISCONNECT都会发送 Session Expiry Interval字段。DISCONNECT中携带该字段可以告知Server更新⽼化时间。
CONNACK中的Session Expiry Interval只有当CONNECT不携带该字段时才有⽤,当client携带该字段,rver发送该字段只是表明⾃⼰最⼤的⽼化时间,不会强制client必须按照这个值。
Maximum QoS
Server 可以发送 Maximum QoS属性告知Client⾃⼰⽀持最⼤的Qos是多少,Client发送的PUBLISH的Qos必然不能⼤于该值。
Receive Maximum
告知对⽅⾃⼰希望处理未决的最⼤的 Qos1 或者 Qos2 PUBLISH消息个数,如果不存在,则默认是65535。
作⽤:流控。if you feel my love
打电话的英文怎么写因为当处理 Qos > 0 的PUBLISH的时候,需要回复对端PUBACK、PUBREC PUBCOMP等。Receive Maximum属性提供了告诉对端发送Qos>0的PUBLISH的速率,对端发现未决PUBLISH个数等于Receive Maximum时,不能再发送Qos > 0 的PUBLISH消息了。
Maximum Packet Size
顾名思义,单个 MQTT控制报⽂ 的⼤⼩,如果不携带,表⽰不限制。
这个⼤⼩指整个 MQTT控制报⽂ 的⼤⼩。对端如果发现将发送的包⼤于该⼤⼩,就默默丢弃,不关闭连接。如果⾃⼰收到超过⾃⼰通告
的Maximum Packet Size需要关闭连接。
Topic Alias Maximum
作⽤见上⽂Topic Alias。
Reason Code
MQTT 3.1.1 只有CONNACK有是否成功还是失败的标志位,现在MQTT 5.0所有的ACK都有该标志位。具体各个ACK中code值得含义在规范中有定义,这⾥不再列举。
需要注意的是,SUBACK中,MQTT 3.1.1 的 Granted Qos被取代为Reason Code,Reason Code中有状态码表⽰了具体的Granted Qos。如果PUBLISH是成功的,其ACK的的Reason Code可以不添加。
Reason String
所有的ACK以及DISCONNECT 都可以携带 Reason String属性告知对⽅⼀些特殊的信息,⼀般来说是ACK失败的情况下会使⽤该属性告知对端为什么失败,可⽤来弥补Reason Code信息不够。可供出售的金融资产
Clean Start
Clean Start取代了 MQTT3.1.1 中 CleanSession,在协议格式上,直接占⽤了CleanSession原本的field,这也表⽰Clean Start语义上和CleanSession是⼀样的。
Payload Format Indicatorin love
销售二八法则
指定了PUBLISH 消息的message部分是utf8格式的还是⼆进制的,接收⽅必须验证payload是否是该属性定义的格式。
Payload Format Indicator 为 0,表⽰ 是⼆进制,和不携带该属性的语义是⼀样的。
Payload Format Indicator 为 1,表⽰ 是utf8编码数据。
Message Expiry Interval
指定了PUBLISH数据在Server的最长等待时间。超过这个时间,这个数据不能被publish到匹配topic的subscriber
还有其他的细枝末节不再展开了,上述众多属性也有⼀些细节的地⽅,可以在原⽂中搜索就直到了。

本文发布于:2023-07-25 04:27:28,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/90/187983.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:属性   需要   信息
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图