【MQTT协议学习】四、取消订阅主题UnSubscribe报文构建

在本文中,我们取消订阅testpublish主题。

UNSUBSCRIBE –取消订阅

客户端发送UNSUBSCRIBE报文给服务端,用于取消订阅主题。
取消订阅报文包含三部分:固定报头、可变报头和有效载荷

固定报头类型码1字节+剩余字节长度1字节(或更多)
可变报头报文标识符2字节
有效载荷主题长度(2字节)+主题(n字节)

UNSUBSCRIBE报文固定报头

Bit76543210
byte 1MQTT控制报文类型 (10)保留位
10100010
byte 2剩余长度

所以我们报文头为:

A2 XX

其中XX为剩余长度,等于可变报头的长度加上有效载荷的长度。我们最后补充

可变报头

Bit76543210
byte 1报文标识符 MSB
byte 2报文标识符 LSB

可变报头即为我们的报文标识符,报文标识符实际上是ID,阿里云会返回这个ID,便于程序进行判断。由于我们订阅报文是ID为10,这儿我们使用11,即订阅的ID+1
此时报文体变为

A2 XX 00 0B

有效载荷

有效载荷包含了两个字节的长度,和主题信息。例如我们取消订阅"a/b"主题,则有效载荷如下:

描述76543210
主题过滤器
byte 1Length MSB (0)00000000
byte 2Length LSB (3)00000011
byte 3‘a’ (0x61)01100001
byte 4‘/’ (0x2F)00101111
byte 5‘b’ (0x62)01100010

我们取消的是testpublish报文,所以载荷为:

00 0B 74 65 73 74 70 75 62 6C 69 73 68

此时报文为:

A2 XX 00 0A 00 0B 74 65 73 74 70 75 62 6C 69 73 68

我们计算XX的值,后面报文总长度为15,所以XX 为0F

A2 0F 00 0B 00 0B 74 65 73 74 70 75 62 6C 69 73 68

示例测试

我们仍旧使用串口调试助手操作无线模块进行数据透传。

  • 1.登录
  • 2.发布主题消息 “HelloWorld!”
  • 3.订阅主题 testpublish
  • 4.发布主题消息 “HelloWorld!”
  • 5.取消订阅 testpublish
  • 6.重新发布主题消息 “HelloWorld!”

从下面图上,我们可以看出,订阅后我们可以收到我们发布的消息;取消订阅后,服务器不再推送消息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值