
一、MQTT通信协议简介
MQTT(Message Queuing Telemetry Transport) 消息队列遥测传输,是一种轻量级、基于发布/订阅架构的通信协议,它专为低带宽、高延迟或传输不稳定的网络通信场景而设计,被广泛应用于物联网、移动设备和嵌入式系统,从而实现设备间的异步消息传输。
1.MQTT协议的核心组件
发布者(Publisher):通过主题(Topic)发布消息的设备。
订阅者(Subscriber):订阅特定主题并接收消息的设备。
代理服务(Broker):代理服务器,负责消息的路由、存储和传递。
2.MQTT协议的Qos机制
Qos0:消息最多传递一次
工作流程:
Publisher发送消息后立即丢弃记录,Subscriber接收消息时不发送确认。
特点:
Qos0策略单向发送消息,无重传和消息确认,延迟最低,带宽占用最小,但消息可能丢失。
Qos1:消息至少传递一次
工作流程:
Publisher发送消息并存储副本。
Subscriber接收到消息后,发送PUBACK确认。
如果Publisher未收到PUBACK,它会重传消息。
特点:
Qos1策略的流程可能重复多次,直至成功或超时,容易产生重复的消息。
Qos2:消息正好一次传递
状态码:
PUBREC(Received Acknowledgement):接收方已存储消息。
PUBREL(Release Message):发送方请求释放存储。
PUBCOMP(Complete Acknowledgement):完成确认。
工作流程:
Publisher发送PUBLISH消息:Publisher发送消息并存储状态。
Subscriber回复PUBREC确认:Subscriber接收消息后,发送PUBREC,表示消息已收到但未处理完毕。
Publisher发送PUBREL释放:Publisher收到PUBREC后,发送PUBREL,指示可以释放消息状态。
Subscriber回复PUBCOMP完成:Subscriber处理完消息后,发送PUBCOMP,至此双方都确认消息已可靠投递。
特点:
Qos2策略网络开销大,消息延迟大,内部实现复杂, 适用于对数据一致性要求极高的场景。
*Qos实现细节:
QoS 1/2中每个消息携带唯一Message ID,用于跟踪消息状态。
执行QoS 1/2时,Broker需缓存未确认消息直至超时或完成交互。
3.MQTT协议的通信流程
(1).建立连接(Connection Establishment)
发布者Publisher或订阅者Subscriber向MQTT服务Broker发送CONNECT报文,以此来发起连接。该报文包含客户端ID、用户名、密码、心跳间隔等参数。
Broker收到CONNECT报文后,开始验证客户端身份和权限,如果验证通过,则返回对应的ACK报文,用来表示连接确认,比如返回0表示连接成功,返回非0表示连接失败。
(2).订阅主题(Subscription)
订阅者Subscriber向Broker发送SUBSCRIBE订阅报文,订阅报文中包含一个或多个要订阅的主题(Topic)以及对应的QoS级别。Broker处理订阅请求,如果订阅成功,则返回SUBACK报文,用来表示订阅确认。
(3).消息发布(Publishing)
发布者Publisher向Broker发送PUBLISH报文,报文中包含主题(Topic)、主题对应的消息内容、QoS级别、消息ID等。
Broker接收到PUBLISH报文后,根据主题匹配所有已经订阅了该主题的订阅者Subscriber,并将主题对应的消息转发给订阅了该主题的订阅者Subscriber。
(4).消息分发(Message Delivery)
消息分发过程依赖Qos策略等级,比如:
QoS=0:Broker直接将消息发送给订阅者,不等待确认,也不重发。
Qos=

最低0.47元/天 解锁文章
2837

被折叠的 条评论
为什么被折叠?



