MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是ISO标准下基于发布/订阅方式的轻量级消息协议,其通常应用于物联网、智能家居等设备和应用程序之间的通信。
图1
MQTT协议由发布者/订阅者,消息代理broker两部分组成,如图1所示,发布者负责消息推送至broker,broker将消息推送至匹配的订阅者。MQTT有两个主要版本: v3 和 v5。这两个版本原理基本相同,但它们之间存在一些关键的差异,下面将从以下几个方面来介绍它们之间的区别。
(1)主题别名
主题是MQTT中的核心概念,它用于标识消息的内容和意图。在MQTT v3中,主题只是一个简单的字符串,其结构是由一系列以斜杠分隔的单词组成的。例如,一个 MQTT v3 主题可以是 sensors/temperature/room1,其中sensors是顶级主题,temperature是其子主题,room1是子主题下的一个特定设备。
图2
然而,在 MQTT v5 中,主题的结构得到了扩展,新增了一些更高级的功能。具体来说,MQTT v5 引入了一个名为主题别名的新概念,它允许客户端将主题字符串映射到预定义的主题 ID,从而减少网络流量和消息大小。这使得客户端能够在发送消息时只发送主题ID,而不必每次都发送完整的主题字符串。这对于 IoT 设备和网络带宽有限的环境来说非常有用。
(2)订阅操作
MQTT v5 引入了一种名为共享订阅的新订阅类型。如图3所示,共享订阅允许多个客户端共享一个订阅,并按照一定规则进行分配。这种订阅类型对于订阅高负载主题非常有用,因为它可以平衡订阅请求,减轻单个客户端的负载压力。
图3
另外MQTT v5 增加了订阅选项的概念,可以指定订阅选项,例如QoS等级、Retain As Publish、Retain Handling、消息的生命周期等,来对订阅行为进行更加精细地控制。
(3)遗嘱消息
遗嘱消息是MQTT为那些可能出现意外断线的设备提供的将遗嘱优雅地发送给第三方的能力。
Will Properties是MQTT v5新增的一个字段,不同类型的报文有着不同的属性,例如CONNECT报文有最大报文长度、会话过期间隔等属性,SUBSCRIBE报文则有订阅标识符等属性。而且MQTT v5较v3相比,遗嘱消息的内容变得更加灵活,可以包含任何主题和任何消息内容。
(4)错误处理
MQTT v5支持更加详细的错误处理机制,可以通过错误码和错误原因来定位和解决问题。同时,MQTT v5还引入了一个新的控制报文——Disconnect报文,可以帮助客户端和服务器更好地处理错误情况。
(5)流量控制
MQTT v5在v3版本基础上引入了一些新的机制用于流量控制,为了更好地控制消息的传输和处理,避免因为消息传输速度过快导致的网络拥塞和负载过高。
最大报文大小限制(Maximum Packet Size):MQTT v5 允许客户端和服务端在握手时协商最大报文大小。如图4所示,这个最大报文大小限制可以用于控制客户端和服务端之间传输的最大消息大小,防止因为传输的消息过大导致网络拥塞和负载过高。
图4
消息队列(Message Queue):当服务端发送的消息超出了客户端处理的速度时,服务端可以将消息存储到消息队列中,等待客户端处理。MQTT v5 定义了消息队列的队列大小和超时时间,以控制消息队列的大小和生命周期。
(6)性能与效率
MQTT v5相对于MQTT v3来说,可以更好地处理大规模的数据传输,提高了通信的效率和性能。例如MQTT v5支持批量发布(Batch Publish)和预取(Message Prefetch)等功能,可以大大减少MQTT通信时的开销。
总之,MQTT v5相比于MQTT v3具有更多的新功能和安全性。但是,需要注意的是MQTT v5相对于MQTT v3增加了很多新的功能和概念,因此在使用MQTT v5时,需要对MQTT协议的新特性进行深入的了解,以便可以更好地使用这个新协议来构建可靠的应用程序。
领取专属 10元无门槛券
私享最新 技术干货