【.com速译】MQTT于1999年推出,最初用于油气管道与远程卫星之间的通信。它现在被广泛用作各种规模部署的工具,以连接多种类型的物联网(IoT)设备。由于是基于TCP/IP的网络协议,MQTT采用了发布者-订阅者的通信模型。它足够轻便,可以在物联网设备上运行,但功能强大,可以在不稳定的网络条件下工作。MQTT的工作原理MQTT协议由以下元素组成:发布者:设备通过主题向订阅者发送消息。主题:每个资源都有一个唯一的标识符。发布者向主题发送消息,然后主题将消息传递给订阅者。订阅者:订阅者作为终端设备,通过主题接收发布者的消息。Broker:服务器充当中央集线器,负责发布者和订阅者之间的组织级通信。下图展示了简单的MQTT通信逻辑。如果某个云平台不适合使用MQTT通信方式开发系统,可以改用hbmqtt、gmqtt和paho-mqttlib。服务质量级别(QoS)是MQTT协议的一项关键功能。作为消息发送者和接收者之间的协议,它定义了系统传递特定消息的能力。客户可以选择与其所在网络的可靠性和应用程序逻辑相匹配的服务级别。由于MQTT可以通过重传机制管理和保证消息的传递(即使底层传输不可靠),QoS可以让不可靠网络中的通信更加安全。物联网开发为什么要用MQTT?凭借其“节能”的数据传输方式,MQTT通常用于CPU和内存(RAM)功率有限的低功耗设备,以及以下用例场景:高效通信。MQTT的低数据量和低能耗使其成为实时、基于文本的消息传递应用程序的首选。安全。在家庭安防系统中,MQTT系统的QoS机制可以保证重要消息的成功传递,从而保证向住户发出危险警报。消息摘要。MQTT使组织能够有效地从智能手机或汽车传感器等多个来源收集数据。同步传感器。例如,多个火警探测器可以相互通信以辨别是否确实存在危险。医疗物联网应用。多个传感器用于监测出院患者的健康参数。车联网。与HTTP不同,MQTT能够维持客户端和代理之间的持久会话。此功能对于车联网特别有用。例如,当车辆离开蜂窝网络的盲点时,会话可以重新连接并继续顺利发送和接收数据,而无需复杂的HTTP握手。MQTT的优势效率是MQTT的一大亮点,通过AMQP等竞争协议让数据传输更加顺畅。用户可以快速轻松地实现轻量级的MQTT协议架构。发送的数据包越少,网络使用率就越低。其低功耗非常适合连接物联网设备。MQTT支持更高效的数据分发。该协议允许更容易的遥感和控制。MQTT的缺点当然,MQTT并不是在所有场景下都是理想的。客观上,MQTT协议有以下缺点:对于超过250台设备的系统,快速的传输周期至关重要。但与CoAP(ConstrainedApplicationProtocol)相比,在传输周期上会慢一些。MQTT可以运行在灵活的主题订阅系统上。另一方面,CoAP使用稳定的资源发现系统。MQTT虽然使用了TLS/SSL,但是缺乏安全加密能力。与其他竞争产品相比,MQTT协议难以创建全球可扩展的网络。MQTTv5.0功能概述MQTTv5.0通过各种新功能可以实现以下目标:提高大型系统的性能。MQTTv5.0使用适当的架构简化和协调数万台设备之间的通信。错误报告。MQTTv5.0协议将返回码重命名为原因码,以指示更多类型的错误。实施定期互动。MQTTv5.0规范了设备交互的重复方式,并定义了它们如何响应请求。添加了可扩展性机制。MQTTv5.0的新功能包括:添加自定义属性、指定内容类型或负载格式。更好的支持。特别是对于希望通过MQTT提高生产力的小用户,更能从中受益。MQTTv5.0和MQTT3.1.1的基本功能1.通信功能通过负载内部的认证方式和认证数据的属性,可以实现增强认证。您可以使用SessionExpirationInterval属性。例如,您可以在订阅时在主题中包含消息将存储多长时间等。最大数据包大小(要传输的字节数)和最大接收量(同时发送的消息数)clientorserver)的客户端和服务器可以在内部进行限制。通过“intervaltobedelayed”属性,实现消息的延迟发送。“服务器引用”或“服务器重定向”属性可以帮助将数据包路由到不同的代理或服务器。2.发布功能消息过期时间间隔可以用来设置消息的保留期限。负载格式标识符和内容类型属性,可以定义为二进制字节、UTF-8或MIME类型。支持主题别名。例如,通过将topic/v1/device/别名为“1”,您可以最大限度地减少所需的数据包数量。MQTT协议的“响应主题”类似于HTTP协议的响应-请求方案。3、订阅功能非本地发布,允许用户选择不接收客户端发布的消息。保留的消息控件可以控制消息的排序。订阅标识符,可用于在订阅中标识服务器。共享订阅可以通过其他标志和过滤函数实现更灵活的订阅。4.一般特性在MQTTv3.1.1中,服务端无法提供建立通信、发布消息、订阅主题等不同阶段的问题和错误原因信息。但是,v5.0可以为所有ACK消息提供原因代码。与MQTT3.1不同,在MQTTv5.0中,客户端和服务器可以相互传递带有掉话信息的数据包。不同的用户属性可以存储在不同的密钥中。小型系统部署中的MQTTv5.0示例让我们看一个基于Python的客户端在本地网络上使用MQTTv5.0的示例。在客观总结其优缺点的同时,我们也会将其与MQTTv3.1.1的网络进行对比。场景简介假设一栋大楼实施了局域网(LAN)覆盖。其中一些房间配备了三种设备——独立的运动传感器、摄像头传感器和音频传感器。其主机设备位于局域网内,通过无线或网线连接到路由器。它定期从各个设备收集或处理数据,并将数据存储在本地数据库中。目前,我们使用SQLLite数据库或更简单的替代方案,只有在收到来自三个传感器的消息时才会激活工作。目标是保证主机设备和单机设备之间的通信,并提供主机端本地数据库的部署和通信。应用需求所有从传感器到主机设备的消息都必须符合MQTTv5.0附加属性的限制(包括:对主题消息传输字节数的限制等)。来自主题的消息必须是MIME类型的,以便在主机端进行快速编码。消息必须存储在本地数据库的一个实例中。设备要求独立设备:基于x86或ARM的设备(例如RaspberryPi),带有已连接的传感器并可访问本地网络。主机设备:基于x86或ARM的设备,具有MQTT代理并且能够处理来自独立设备的消息。通过paho-mqtt支持MQTTv5.0和Python的代理是两种常见的代理。但是,由于它们没有内置MQTTv5.0代理,因此无法在网络本地部署。为此,我们使用支持MQTTv5.0的Mosquitto作为代理。支持文档链接是--https://mosquitto.org/。它可以代理大约200到300台设备,一次只支持一个连接。基于Python的系统如何使用MQTTv5.0从Python开发人员的角度来看,MQTTv5.0协议中的库和文档并不多。它唯一的Python客户端是上面提到的gmqtt和paho-mqtt。MQTTv5.0本地网络的优点和缺点优点局域网内自主设备的完全交互,无需云服务提供商,如GCP(谷歌云平台)或AWS,也不需要本地物联网系统的WAN连接.网络延迟和数据传输速度。传输速度仅取决于本地设备的硬件能力。在LAN环境中,可以通过放置设备来最大限度地减少延迟。与竞品相比,MQTT更节能。网络安全性高。由于本地网络未暴露给WAN,因此本地网络外的实体无法捕获或跟踪带有消息的数据包。同时,MQTTv5.0协议提供了服务端和客户端之间的相互认证。此外,MQTT使用TLS证书实现安全连接和数据传输。可以将对数据包的各种限制应用于网络中的代理。它的容器化特性更容易模拟和调试。缺点用于处理消息的线程应并行管理,以确保设备正常运行。开发人员必须定期进行调试和故障排除,并且必须使用安全的SSH来保护主机和独立设备之间的WAN连接。MQTT协议不支持流式传输。由于无法实现大文件传输,需要专门的bucket上传或者HTTP协议。代理无法智能地管理数据。当然,数据可以在断开的时候保存一段时间。MQTTv5.0相对于v3.1.1的改进存储附加数据的属性加载格式的指示符类型包括:字节、UTF-8或UTF-8字符串对请求/响应方式客户端连接和断开原因代码会话过期和控制MQTTv5.0可以简化数据负载的处理和解析,并具有单独和精确控制消息、连接和会话的能力。此外,还可以通过属性传输额外的数据,开发人员可以从中创建更复杂的物联网解决方案。MQTTv5.0的挑战在生产环境中,开发者需要管理用于在独立设备上并行发布和收听消息的进程和线程。在paho-mqtt等代码包中,各个类的实现过程并不明确,参考文档也非常有限。由于缺少文档,开发人员很难安装代理并将其升级到MQTTv5.0。为了识别网络中的设备,我们需要在系统中添加一个IP查找器。我应该使用MQTTv5.0吗?一般来说,如果你有一个托管的代理设备,在设备和主机之间进行消息通信,并且物联网规模较小,那么首选使用MQTTv5.0进行本地物联网设备之间的通信。原标题:MQTT5vs.MQTTv3.1.1forIoTAppDevelopment,作者:DaniilLiadov
