MQTT 是什么?有什么用途
MQTT 是一种轻量级消息传递协议,通常与物联网设备一起使用,其设计旨在提高能效并将带宽消耗降至最低。
MQTT 协议在 TCP/IP 上运行,基于无损通信的双向发布-订阅模型,确保 MQTT 消息高效无损地传递。
MQTT 是一种低开销协议,它充分考虑了带宽和 CPU 的限制。它的设计理念是能够在嵌入式环境中运行,可靠有效地提供通信途径。
MQTT 从根本上说是一个发布/订阅(pub/sub)协议。它允许客户端以发布者、订阅者或两者身份连接到特定主题。您连接到处理所有消息传递的代理,每个客户端都由一个唯一的客户端 ID 标识。
真实的 MQTT 示例和用例
MQTT 通常用于物联网应用,与传感器、执行器和家用电器等低功耗设备连接和通信,有效管理传输的有效数据负载。
在农业领域,MQTT 用于监控土壤湿度、温度和湿度等环境因素,以便农民采取适当的措施。在工业自动化领域,MQTT 可以监控端到端的生产流程,确保质量的一致性,并识别生产链上的系统性问题。在交通领域,MQTT 可用于监控交通信号灯、停车计时器和公共交通的实时位置,同时兼顾生态系统和低带宽要求。
为什么使用 MQTT 而不是 HTTP?
HTTP 和 MQTT 是两种完全不同的通信协议,用于不同的目的。
HTTP 是一种请求/响应协议,只根据客户端的请求传送数据。它专为大量数据而设计,常用于传输网页、图像和视频。MQTT 是一种发布/子协议,可实现异步消息传递,多个客户端可订阅一个主题,并从一个或多个发布者接收消息。MQTT 针对少量数据进行了优化,但在网络开销和设备功耗方面比 HTTP 更有效,因此适合需要低带宽和最低功耗的应用。
MQTT 用什么语言编写?
MQTT 只是一种协议,可以用多种语言编写。不过,MQTT 客户端库(用于使用 MQTT 协议进行通信)可用多种语言编写,如 C/C++、Java、Python 和 JavaScript(包括 Node.js、Ruby、Go、PHP 和 Swift)。MQTT 客户端库通过 MQTT 代理进行通信,MQTT 代理也有多种编程语言可供选择。
MQTT 如何工作?
MQTT 是一个非常灵活的协议,但只有两个基本实体:MQTT 客户端和 MQTT 代理。
MQTT 客户端如何工作?
MQTT 客户端可以是实现 MQTT 协议的任何端点。在物联网中,客户端是连接的设备,如传感器、监视器或 Arduino 板,但 MQTT 并不局限于物联网,客户端也可以是智能手机或笔记本电脑等。
MQTT 客户端之间不直接通信。不过,所有的交互都是由被称为 MQTT 经纪人的服务器组件 “中介 “的,它位于客户端之间并处理消息的路由。
什么是 MQTT 分组?
MQTT 中的所有通信都被分组为 “主题”。 MQTT 客户端可以向主题发布消息,也可以订阅接收来自其他主题的消息。 主题可以是任何字符串,目的是将共同感兴趣的主题分组,例如,传感器更新会发布到主题中,群聊中的消息也会发布到主题中,具体取决于使用情况。
什么是 MQTT 代理?
代理负责管理哪些客户端订阅了哪些主题,接收在特定主题上发布的消息,并将消息发送给订阅更新的任何客户端。 当客户端与代理之间的连接中断时,代理还负责缓存消息,并在重新建立连接时将消息传递给客户端。
有哪些 MQTT 代理可以使用?
MQTT 代理是 MQTT 协议的基础,可视为 MQTT 服务器。 如前所述,代理位于所有客户端之间并促进通信。
现有许多 MQTT 代理,既有开源的,也有专有的,任何基于 MQTT 的部署最重要的架构决策之一就是如何托管代理。 由于 MQTT 设计用于大规模运行,因此任何代理架构都需要相应地扩展。大多数企业部署将依赖于云托管的专有产品,因此他们没有任何基础设施方面的顾虑,不过也有自托管的选择。
中间商位于所有通信之间,可以保留信息,并对所有会话进行安全记录;客户端相互隔离,因此客户端的不安全性和漏洞可以被沙箱隔离;根据网络拓扑结构,中间商可以减少整个网络的流量,并实现更高效的路由选择。
如何使用 MQTT 和 Pub/Sub
任何支持 MQTT 协议的客户端都可以订阅和发布主题,但所有通信都要通过代理进行,如下面的示例模型所示。
MQTT 协议功能
虽然 MQTT 通常被认为是一种物联网解决方案,但它只是许多知名物联网产品的基础协议。 MQTT 的许多特性使其特别适合设备间的高效通信:
易于启动和运行
MQTT 由来已久,有许多强大、可靠、可扩展的专有和开源解决方案。 这些已有的 MQTT 组件可用于所有项目,从大型解决方案到激情项目,无需修改,也与开发人员的经验无关。
可靠性和配置
MQTT 具有服务质量(QoS)的概念(稍后将详细讨论),它在 MQTT 代理上排队并缓存消息,在重新建立连接时将消息传递给客户端。 这对于部分连接的设备或连接时断时续的客户端(如物联网设备)尤其有效。
客户端无需考虑解决方案架构
使用 MQTT,您可以向主题发布消息,并在消息可用时接收它们。 作为客户端,您不必担心建立或重新建立连接,也不必担心收件人是否在监听您的消息,”只需工作 “即可。
专为规模而设计
MQTT 可以满足您的解决方案所需的任何规模,从初创企业到全球性公司。 最有名的是 Facebook Messenger 使用 MQTT 进行通信。
MQTT 会话生命周期
MQTT 依靠 TCP/IP 进行连接,因此遵循类似的生命周期
连接
MQTT 客户端启动与 MQTT 代理的连接。 通常,这将通过标准的 MQTT 端口(1883/883 分别用于安全和不安全连接)
身份验证
除了底层 TCP/IP 连接的 TLS 外,MQTT 协议没有任何身份验证方面的考虑,这对于大多数用例来说已经足够。
发布/订阅
连接后,客户端可发布或订阅主题以发送和接收消息。
断开连接
断开连接可由客户端或代理发起,并会在处理完任何正在进行的请求后导致 MQTT 会话结束。
MQTT 服务质量(QoS)
服务质量允许解决方案设计者指定 MQTT 连接的可靠程度,一般来说,连接越可靠,重试和信息保留的潜在内存开销就越大。
QoS-1
消息只发送一次,客户端和代理不采取任何额外步骤确认发送。 这也被称为 “触发并遗忘”。
这只适用于客户端发送的信息。 一旦经纪商收到信息,它们就被视为 QoS 0
QoS 0
发送方和接收方进行握手,以确保只收到一份报文。 这样可以确保信息的传递,避免发送多份信息。
QoS 1
信息被多次重复发送,直到收件人确认收到为止。 这对时间敏感的信息最有效,但可能导致接收到重复信息。
MQTT 用例和物联网
MQTT 是一种轻量级、省电的协议,多年来一直被用于那些需要考虑这些关键因素的解决方案中。
物联网是 MQTT 最受欢迎的应用实例。 物联网设备通常由电池供电,维护费用可能非常昂贵,因此电池更换间隔时间长是首选。 在家庭环境中,偶尔更换一次电池并不困难,但在工业环境中,成千上万的传感器分布在广阔的区域内,而且通常位于非常难以到达的位置,因此维护成本可能会非常高昂。
MQTT 物联网用例包括火灾探测器、失窃追踪、位置监控、传感器、发动机状态等。 MQTT 的数据开销也非常低,因此,在数据昂贵或部署了成千上万台设备因而带宽是个问题的环境中,MQTT 是理想之选。
MQTT 在实时通信中也非常流行,最著名的例子就是 Facebook Messenger。 为什么 Facebook 会选择使用 MQTT? 因为它不会耗尽手机电池,不会使用过多数据,在安全协议上运行,允许扩展,可轻松实现群组聊天,并通过中央 MQTT 代理骨干基础设施分发所有数据。
本文来自作者投稿,版权归原作者所有。如需转载,请注明出处:https://www.nxrte.com/jishu/43117.html