首页
搜索
历史搜索
搜索发现
首页 > 新闻中心 > 技术应用

MQTT协议的优缺点

2022-11-04 13:41:33| 来源:聚英电子| | 0

  物联网是对传统互联网的扩展和扩展。用户终端从传统计算机扩展到任何设备,其中该设备先通过各种传感器收集信息,然后再通过计算设备收集信息、交换和交流网络信息。之所以出现MQTT协议,是因为移动互联网目前尚处于起步阶段,无法提供可靠的网络保证。

  MQTT是基于TCP/IP协议栈构建的异步通信消息协议,是一种轻量级的发布/订阅信息传输协议。MQTT在时间和空间上,将消息发送者与接受者分离,可以在不可靠的网络环境中进行扩展。

  适用于设备硬件存储空间有限或网络带宽有限的场景。物联网平台支持设备使用MQTT协议接入MQTT的特点是可以保持长连接,具有一定的实时性,云端向设备端发送消息,设备端可以在最短的时间内接收到并作出响应,所以MQTT更适合需要实时控制的场合,更适合执行器。要保持长连接,那么就要时不时地发送心跳包,这就不会省电了。所以低功耗的场合并不适合MQTT。MQTT的长连接需要建立在TCP的基础上,TCP协议的复杂性决定了对设备的要求是比较高一些的,相比UDP。

  

MQTT传输协议


  特点

  MQTT协议是为大量计算能力有限,且工作在低带宽、不可靠的网络的远程传感器和控制设备通讯而设计的协议,它具有以下主要的几项特性:

  使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合;

  对负载内容屏蔽的消息传输;

  使用 TCP/IP 提供网络连接;

  有三种消息发布服务质量:QoS(定阅等级),分0、1、2三个等级,简单来说是等级越高越可靠。

  “至多一次”(QoS0):消息发布完全依赖底层 TCP/IP 网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。即是推送之后就完事了,至于对方有没有收到,收到是什么,数据有没有丢失,都不管。

  “至少一次”(QoS1):确保消息到达,但消息重复可能会发生。即使你收到推送后,你还得返回一个puback给对方,告诉对方收到了,不然对方会以为你没收到,隔一段时间后重新给你推送,直到你给对方返回一个Puback为止。

  “只有一次”(QoS2):确保消息到达一次。这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果。  

  小型传输,开销很小(固定长度的头部是2字节),协议交换最小化,以降低网络流量;

  使用 Last Will 和 Testament 特性通知有关各方客户端异常中断的机制。

  Last Will:即遗言机制,用于通知同一主题下的其他设备发送遗言的设备已经断开了连接。

  Testament:遗言机制,功能类似于Last Will。

  MQTT客户端可以注册一个典型的遗愿遗嘱消息,如果它们断开连接,由代理发送。这些消息可以用于向订阅者发出信号,当设备断开连接时。

  优点

  1.MQTT的独特功能是每个消息头都可以缩短为2个字节。对于HTTP,为每个新请求消息重新建立HTTP连接会产生可观的开销。 MQ和MQTT使用的持久连接可以大大减少这种开销。

  2.包容不稳定的网络,MQTT和MQ可以从诸如断开连接之类的故障中恢复,无需进一步的代码要求。但是,HTTP本身无法实现此目标,并且客户端必须重试编码,这会增加身份问题。

  3.低功耗MQTT专为低功耗目标而设计。 HTTP设计未考虑此因素,这会增加功耗。

  4.在连接数百万个客户端的情况下,在HTTP堆栈中维护数百万个并发连接需要大量工作才能提供支持。尽管这种支持是可行的,但大多数商业产品都经过优化以处理此订单上的持久连接。 IBM提供了IBM MessageSight,这是一种单机架安装服务器,已经过测试,可以通过MQTT处理多达一百万个并发设备。相反,MQ不是为许多同时进行的客户设计的。

  5.推送通知。您需要能够及时向客户发送通知。为此,您应该使用常规的轮询或推送方法。就电池,系统负载和带宽而言,推送是最佳解决方案。

  6.客户端平台的差异。 HTTP和MQTT客户端都在许多平台上实现。 MQTT的简单性可帮助您以最少的努力在其他客户端上实施MQTT。

  7.防火墙容错能力。某些公司防火墙将出站连接限制到某些预定义的端口,这些端口通常仅限于HTTP(端口80),HTTPS(端口443)等,HTTP在这种情况下显然可以工作。 MQTT封装在WebSockets连接中,并显示为HTTP升级请求,因此可以在这种情况下运行。

  缺点

  实际上,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.不支持群组通信或群组管理,而是实现群组成员的管理。小组成员可以交换消息,如果一个设备由多个人控制或多个设备由一个人控制,则此功能特别有用。


联系销售
销售王经理微信 销售王经理
微信公众号 微信公众号
服务热线
400-6688-400