MQTT通信框架C++编程实战,基于Mosquitto库实现

一、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=

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员与背包客_CoderZ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值