MQTT协议基础(7):MQTT5.0部分新特性&实战小技巧
MQTT5.0部分新特性&实战小技巧包括共享主题、双向DISCONNECT、如何传输大文件、消息去重等
MQTT学习的总结思维导图
MQTT5.0新特性
- 用户属性(User Properties)
新特性中可以在CONNECT PUBLISH和带有Return Code的数据包中携带一个或多个用户属性数据,这样的可以得知发送方的信息,便于答复。 对于需要得知发布者信息的场景比较适用 - 共享订阅(Shared Subscriptions)
多个Client共同订阅一个共享主题,那么这个共享主题的消息就会依次均衡地发布给这些Client,实现订阅者地负载均衡。 适用于发布者对同一主题频繁上传数据量较大的数据包 - 消息过期(Publication Expiry Interval)
3.1.1版本中通常是在消息体中携带一个时间来指明,消息过期的时间。这个要求,服务器和客户端时间一致,但某些设备,一旦断电后再重启时间会变得不准确,导致异常。5.0中直接包含消息过期功能,发布时直接指定多久之后过期,避免上述问题。
适用于客户端有断电、断网等不稳定情形。 - 重复主题
3.1.1中连续发布相同主题的消息时,每次都要带上相应的主题消息。 5.0中如果PUBLISH中主题长度置为0,默认使用上一次发布时采用的主题
适用于连续发布同主题消息 - Broker能力查询
5.0协议中,CONNACK数据包中包含了一些预定义的头部文件,用于标记支持哪些MQTT协议功能。如:是否支持Retained消息,是否支持共享订阅,可以支持的最大QoS,可发送最大消息长度,支持的最大Keepalive值,是否支持共享订阅。 - 双向DISCONNECT
5.0中Broke在主动断开连接时也会发送DISCONNECT数据包,同时从Client到Broker,以及Broker到Client的CONNECT都会包含一个Reason Code
关于Reason Code其中包含多种返回值,代表具体的断开连接的原因。具体参数表如下
MQTT实战tips
如何传输大文件
基本思路:将大文件先上传到第三方云端,之后传输文件的url。
优点
- 即可以简化发送的数据包
- 又可以减少Broker缓存的内存压力
- 同时第三方云端通常具有更快的下载速度
- 用户也可以根据需要判断是否需要下载。
如何消息去重
基本思路:在消息体内部设置消息ID,当收到重复ID时,直接丢弃。
思维导图
(建议网页中打开原图查看)