Mqtt(messagequeuingtelemetrytransport)是一种基于发布/订阅模式通信协议的“轻量级”通信协议,它基于TCP/IP协议,由IBM于1999年发布。mqtt的最大优点是,它可以用很少的代码和有限的带宽为连接的远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通信协议,它广泛应用于物联网、小型设备、移动应用等领域。
Mqtt是一种基于客户机-服务器的消息发布/订阅传输协议。Mqtt协议轻量级、简单、开放且易于实现。这些特点使其具有广泛的适用性。在许多情况下,包括受限环境,如机器对机器(M2M)通信和物联网(IOT),它已通过卫星链路、偶尔的拨号医疗设备、智能家居和一些小型设备广泛应用于通信传感器中。
物联网是对传统互联网的扩展和扩展。用户终端从传统的计算机扩展到任何设备,其中设备首先通过各种传感器收集信息,然后通过计算设备收集信息、交换和交换网络信息。mqtt协议之所以出现,是因為移动互联网尚处于起步阶段,无法提供可靠的网络保障。
1、Mqtt有许多优点
1.mqtt的独特功能是每个消息头可以缩短為2个字节。对于HTTP,為每个新请求消息重新建立HTTP连接会产生相当大的开销。MQ和mqtt使用的持久连接可以极大地减少这种开销。
2.遏制不稳定网络。Mqtt和MQ可以从诸如断开连接之类的故障中恢复,而无需进一步的代码要求。但是,HTTP本身无法实现这些目标,客户端必须重试编码,这将增加身份问题。
3.低功耗mqtt设计用于低功耗。
HTTP设计中未考虑此因素,这将增加功耗。
4.当连接数百万个客户端时,在HTTP堆栈中维护数百万个并行连接需要大量工作来提供支持。
尽管这种支持是可行的,但大多数商业产品都经过优化,以处理此订单上的持久连接。IBM提供了IBMmessagesight,这是壹个经过测试的独立安装服务器,可以通过mqtt处理多达壹百万个并發设备。相比之下,MQ不是為许多同时出现的客户设计的。
5.推送通知。
您需要能够及时向客户发送通知。為此,应使用常规轮询或推送方法。就电池、系统负载和带宽而言,推送是最好的解决方案。
6.客户端平台之间的差异。HTTP和mqtt客户端都在许多平台上实现。mqtt的简单性帮助您在其他客户机上以最小的工作量实现mqtt。
7.防火墙容错。某些公司防火墙将出站连接限制给某些预定义端口。这些端口通常限于HTTP(端口80)、HTTPS(端口443)等。HTTP显然在这种情况下起作用。Mqtt封装在WebSockets连接中,并显示為HTTP升级请求,因此它可以在这种情况下运行。
mqtt的缺点
事实上,mqtt被广泛使用,几乎可以在任何大型硬件和互联网公司中找到,如Facebook、BP、阿里巴巴和百度。
由于mqtt的技术优势,越来越多的公司选择mqtt作為物联网产品通信的标准协议。因此,工程师们逐渐意识到mqtt协议的功能需要通过大规模商业化来改进。例如:
1.如果没有完整的SDK,则需要不同异构设备的软件SDK包与mqtt服务器(如MCU、Linux、Android、iOS、web)进行通信,实现互联互通。
2.不支持文件和AV。在某些应用场景中,要传输的信息可能不限于需要通过AV与文件通信的指令,例如语音和视频信号。
3.不支持与第叁方HTTP集成。Mqtt协议优于传统的HTTP协议,但基于传统HTTP协议的Web服务器在主流市场上仍占据主导地位。这些服务器应与mqtt协议互连,以降低升级成本。
4.不支持负载分配。负载分布式服务器对于高并行性和防止恶意攻击也至关重要。
5.不支持用户管理界面。这在用户分析设备行为数据时何其重要。在工业4.0和大数据时代,这是壹种必然的需求。
6.设备脱机后,不支持脱机消息来补偿从mqtt服务器到设备的控制信息丢失。
7.不支持点对点通信,使用标准mqtt协议。理论上,点对点通信可以通过相互订阅来实现,但逻辑相对复杂,涉及设备安全。当设备B和设备C相同时——在对象的情况下,设备a无法知道消息是来自设备B还是来自设备C,并且消息很可能被设备D***。
8.不支持集团沟通和集团管理,实现集团成员的管理。团队成员可以交换消息,如果壹台设备由多人控制或多台设备由一人控制,这一点尤其有用。
mqtt协议的实现模式
mqtt协议的实现需要客户端和服务器之间的通信。在通信过程中,mqtt协议中有三个标识:发布者、代理(服务器)和订阅者。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。
mqtt传输的消息分为两部分:主题和有效负载:
(1)主题可以理解为消息的类型。订阅后,订阅方将收到该主题的消息内容(有效载荷);
(2)有效载荷可以理解为消息的内容,指订户要使用的特定内容。
网络传输和应用信息
Mqtt将构建底层网络传输:它将建立客户端到服务器的连接,并在两者之间提供有序、无损、基于字节流的双向传输。
当应用程序数据通过mqtt网络发送时,mqtt将把服务质量(QoS)和与其相关的主题关联起来。