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