MQTT简介
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议)是一个基于C/S架构的发布/订阅模式的消息传输协议。
目的是在带宽和连接有限的不可靠网络的环境下发送少量数据,设计思想是轻量、开放、简单并且易于实现。
这些特性使得MQTT非常适合在受限的环境的环境中使用,比如机器对机器(M2M)通信和物联网(IoT)。
MQTT简介
MQTT通信原理如下图:
与HTTP、SMTP等协议相比,MQTT使用二进制消息格式在客户端和代理之间进行通信。
通过使用二进制格式,MQTT可以最小化需要传输的数据量,并减少解释消息所需的处理能力。这使得MQTT非常适合在低带宽或低功耗环境中使用,例如资源(处理能力、内存和电池寿命)有限的物联网设备。
该协议的另一个重要方面是,MQTT在客户端非常容易实现。易用性是MQTT开发中的一个关键问题,这使得它非常适合资源有限的受限设备。
主要特性
消息模型
MQTT消息传递模型是基于主题(Topic)和订阅的(Subscription),客户端发布消息到指定主题或从指定主题订阅消息。
主题是分层的,由“/”分隔为多个层级,例如:toplevel/level1/level2
。
订阅则指的是客户端从哪些主题中接收消息。
原理是:当客户端订阅某主题时,实际上是告诉broker该客户端对发布到该主题上的消息感兴趣,然后broker监控该主题,并将发布到该主题上的任何消息转发给订阅的客户端。
客户端和主题之间是多对多的关系,即一个客户端可以订阅多个主题,一个主题可以由多个客户端订阅。
在主题和订阅之外,MQTT支持以通配符来匹配主题。通配符有两种,分别是+
和#
。
+
是单级通配符,只能匹配主题中的一个级别;#
是多级通配符,可以匹配指定级别之后的所有级别。
服务质量QoS
MQTT支持三个服务质量(QoS)级别: QoS0、 QoS1和 QoS2。
发送方可以是客户端也可以是代理,接收方亦之。
QoS0
发送方最多传递一次消息,不会等待确认,因此消息可能会丢失。通常用于可以接受消息丢失或消息不重要的情况。
QoS0适用于发送传感器数据,因为偶尔的数据丢失不会显著影响总体结果。
QoS1
发送方至少传递一次消息,会等待接收方确认,并在必要时重新发送。通常用于消息丢失是不可接受的,但消息复制是可以容忍的情况。
对于QoS1,发送方将消息发送给接收方,并等待确认。如果接收方没有在设定的时间内响应,发送方将重新发送消息。
当接收方发送确认消息失败,就会导致发送方重复发送消息,由此产生消息重复。
QoS2
- 发送方准确传递一次消息,会等待接收方确认(保证消息到达);
- 发送方通知接收方开始传递新消息,接收方回应发送方(用于确保消息不重复);
- 开始新消息传递。
当发送方与接收方之间确认进行下一次新消息发布之前,在此之间发送的消息都是被认为是重复消息,可以被覆盖。
通常用于消息丢失或重复完全不可接受的情况。
QoS2中,发送方和接收方参与一个两步确认过程。可用于关键消息,如金融事务或紧急警报。
QoS等级越高,消耗的资源越多,并且可能会导致延迟和网络流量增加。
持久会话和消息持久性
消息持久性可以确保在发生网络故障时消息不会丢失。
当重新建立连接后,接收方未确认的QoS1、QoS2的消息仍旧存在,并且需要被确认。
安全
MQTT支持TLS加密,用于客户端和服务器之间的安全通信。
应用场景
智能家居
MQTT可以用于连接智能家居中的各种设备,包括智能恒温器、灯泡、安全摄像头和其他设备。
这将允许用户使用移动应用程序远程控制他们的家庭设备。
工业自动化
MQTT可以用于连接工厂中的机器和传感器。
这将允许对加工过程进行实时监视和控制,从而提高效率并减少停机时间。
农业
MQTT可以用于精准监测土壤湿度水平、天气状况和作物生长。
这将有助于农民优化灌溉和其他作物的管理做法。
医疗健康
MQTT可以用于将医疗设备和传感器(如血糖仪和心率监测器)连接到医疗保健提供者。
这将允许远程监测患者,可以实时了解患者的状况并降低医疗保健成本。
交通
MQTT可以用于连接的汽车和其他交通系统,以实现对车辆的实时跟踪和监控。
这可以提高安全性,有助于优化交通流量。
- 原文作者:生如夏花
- 原文链接:https://blduan.top/post/%E4%BC%A0%E8%BE%93%E5%8D%8F%E8%AE%AE/mqtt/mqtt%E7%AE%80%E4%BB%8B/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。