MQTT协议详解及开发教程(九)订阅SUBSCRIBE及SUBACK报文流程分析

推荐一款稳定的基于C编写的MQTT Client开源库 cMQTT
MQTT协议详解及开发教程(一)MQTT协议概述
MQTT协议详解及开发教程(二)MQTT服务器EMQx搭建
MQTT协议详解及开发教程(三)MQTT Client工具软件选择及简单测试
MQTT协议详解及开发教程(四)MQTT协议报文格式
MQTT协议详解及开发教程(五)CONNECT/CONNACK报文分析
MQTT协议详解及开发教程(六)PUBLISH发布QoS0消息报文分析
MQTT协议详解及开发教程(七)PUBLISH发布QoS1报文流程分析
MQTT协议详解及开发教程(八)PUBLISH发布QoS2报文流程分析

前言

在上一篇文章中,我们对PUBLISH发布QoS 2报文进行了分析,本文我们接着分析SUBSCRIBE及SUBACK的报文流程,“订阅机制”是MQTT协议的一大特点,个人也认为是MQTT最大的一个亮点。关于“订阅”的含义,可以参考前面的文章,这里不再赘述。
SUBSCRIBE的QoS等级不同,但是报文结构是相同的,所以本文以QoS2举例

1. Client 订阅SUBSCRIBE 主题示例

订阅QoS 2主题示例

1.1 SUBSCRIBE抓包

SUBSCRIBE抓包
源码如下:

82 0e 00 09 00 09 54 65 73 74 54 6f 70 69 63 02

1.2 固定报头

82 0e
其中:
82 – 对应的控制报文类型为SUBSCRIBE
0e – 剩余长度0x0e = 14个字节

1.3 可变报头

00 09 当前的报文 packet ID为 2

1.4 有效载荷

1.4.1 订阅topic信息

00 09 54 65 73 74 54 6f 70 69 63
其中,
00 09–对应topic 长度。
54 65 73 74 54 6f 70 69 63 --对应的ASCII码:TestTopic

1.4.2 订阅topic的QoS值

02–表示QoS 2

2 SUBACK 报文分析

2.1 SUBACK 抓包

SUBACK抓包
源码:

90 03 00 09 02                                  

2.2 固定报头

90 03
其中:
90 – 对应的控制报文类型为PUBREC,
04 – 剩余长度0x03 = 3个字节

2.3 可变报头

00 09
这里就是报文描述符Packet ID,与SUBSCRIBE中的是一致的。

2.4 有效载荷

返回码,每个返回码对应等待确认的SUBSCRIBE报文中的主题过滤器QoS,返回码的顺序必须与SUBSCRIBE报文中的QoS相同。
返回码值定义:

状态描述
0x00成功最大QoS 0
0x01成功最大QoS 1
0x02成功最大QoS 2
0x80失败订阅失败
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值