物联网 (IoT) 和机器对机器 (M-to-M) 技术需要消息传递和连接协议来交换远程位置的信息。 选择此类协议时,需要考虑几个理想的功能: 代码占用少(以便在小型设备中轻松实现) 低功耗 带宽消耗低 低延迟。
什么是 MQTT?
MQTT 是一种轻量级消息传递 协议,由 IBM 开发,于 1999 年首次发布。它使用发布/订阅模式并在设备、服务器和应用程序之间转换消息。< /span> 最初,MQTT 的创建目的是为了将石油管道上的传感器与通信卫星连接起来,重点是最大限度地减少电池使用和带宽消耗。 MQTT 自诞生以来一直在不断发展。 2018 年 5 月发布的 5.0 版本为 MQTT 协议带来了重大变化和增强。
在 MQTT 协议中,连接的设备称为“客户端”,它们与称为“代理”的服务器进行通信。代理处理客户端之间的数据传输任务。
每当客户端(也称为“发布者”)想要分发信息时,它就会发布特定主题。然后,代理将此信息转发给已订阅该主题的任何客户端(称为“订阅者”)。
发布者不需要有关订阅者数量或位置的数据,订阅者也不需要有关发布者的任何数据。任何客户端都可以充当发布者、订阅者或两者。通常情况下,客户彼此不认识,只知道充当中介的经纪人。这种设置通常称为“发布/订阅模型”。
MQTT 消息类型
在 MQTT 协议中,客户端使用两种主要类型的消息:发布和订阅。
当客户端想要向代理发送数据时,这称为“发布”。相反,当客户端想要从代理接收数据时,它将“订阅”一个或多个主题。订阅主题后,客户端将收到该主题上发布的所有消息。
我们通常将发布的数据称为“消息”。消息可以是系统的一个部分需要与其他部分通信的任何内容。消息可能是原始传感器读数、日志消息、遥测数据或心跳。有些消息可能更像命令,提示接收客户端执行特定操作。
除了消息本身之外,发布者还发送 QoS(服务质量)级别。该级别定义了消息传递的保证。这些 QoS 级别如下:
最多一次:当消息发布时,代理只会“最多一次”接收该消息。此级别不应用于关键任务信息,因为它存在订阅者收不到消息的风险。
至少一次:发布者重新发送消息,直到收到代理的确认。换句话说,确保消息被接收比确保只接收一次更重要。这是最常用的 QoS 级别。
恰好一次:发布者和代理共同确保消息被接收并执行一次。此级别涉及四部分握手形式的额外开销。尽管这是最安全的 QoS 级别,但它也是最慢的,因此仅在必要时使用。
MQTT案例
MQTT 是一种多功能消息传递协议,在物联网领域拥有众多用例。以下是一些常见的应用:
遥测和传感器网络:MQTT 非常适合从环境监测、工业自动化和智能农业中的传感器收集数据。
家庭自动化:MQTT 可实现智能设备之间的无缝通信,用于控制和监控照明、安全和恒温器等家庭系统。
工业物联网:MQTT 促进机器之间的高效数据交换,从而实现预测性维护、远程监控和流程优化。
资产跟踪:MQTT 处理间歇性连接的能力和低功耗使其对于车辆和有价值资产的实时位置跟踪非常有价值。
能源管理:MQTT 用于智能能源系统,用于智能电表、能源管理系统和设备之间的高效通信,从而实现负载平衡和能源优化。
医疗保健和可穿戴设备:MQTT 有助于远程患者监控、实时健康数据传输以及与医疗保健环境中的可穿戴设备集成。
MQTT 在各种物联网场景中得到广泛应用,展示了其多功能性、高效性和可靠性。现在让我们更详细地探讨 MQTT 的好处。
MQTT 有什么好处?
MQTT 协议为物联网应用提供了多项优势:
轻量级代码占用:设备只需几行代码即可启动并运行 MQTT 协议。
最小化数据包:MQTT 非常节能,非常适合电池供电的设备或 CPU 功率有限的设备。
速度:MQTT 实时运行,确保 QoS 之外没有延迟。
易于实施:MQTT 已经拥有 Elixir 和 Python 等编程语言的库。
遗嘱:万一客户端意外断开连接,您可以设置消息指令发送给所有订阅者以补救这种情况。
保留消息:每个主题都可以有一条保留消息,客户端在订阅时会自动收到该消息(例如社交媒体上的固定帖子)。
MQTT 的缺点是什么?
以下是您的用例可能会出现问题的情况:
消息排序:MQTT 协议中的排序保证不是绝对的。尽管代理通常按照接收顺序发送关于同一主题的消息,但指定的 QoS 级别可能会影响这一点。协议规范允许代理将各个主题视为无序,并且跨主题的排序不是规范的一部分。
维护健康的连接:虽然协议支持在超时或崩溃后重新建立连接,但必须验证您的客户端是否需要应用程序代码来实现此功能。
限制:可能会因为过多的消息而导致客户端过载。如果您的客户和经纪人都不能自动处理此问题,您将需要实现应用程序代码来管理它。
MQTT 的常见替代方案
虽然 MQTT 协议在物联网中广泛使用,但还有其他选择可供考虑:
XMPP
XMPP(可扩展消息传递和状态协议)是一种基于 XML 语言的用于存储和传输数据的通信协议。它经常用于支持 Jabber 等即时消息服务。
XMPP 和 MQTT 之间的一些主要区别是:
XMPP 代码占用量稍重,并且需要 XML 解析器来编码和解码信息。
默认情况下,XMPP 不支持 pub/sub 模型(尽管可以通过扩展支持)。
XMPP 比 MQTT 占用更多带宽。
HTTP(S)
HTTP(超文本传输协议)及其扩展 HTTPS(安全超文本传输协议)是万维网的基础通信协议。然而,它们是无状态的,每次传输的开销比 MQTT 更多。此外,HTTPS 的吞吐量低于 MQTT,这意味着您无法在相同的时间内发送尽可能多的消息。
结论
MQTT 在物联网项目中发挥着至关重要的作用,它在技术规范方面提供了更加“低提升”的解决方案,同时实现了设备、服务器和应用程序之间所需的连接。其轻量级特性、能源效率、实时操作和易于实施使其成为物联网领域的热门选择。