mqtt协议详解_阿里云物联网平台使用心得(25)MQTT协议详解UNSUBSCRIBE报文

efcc2b580d554414b254c5febe1034cf.png

题目

大家好,超子又和大家见面了,超子我能力有限,水平不高,有什么错误的地方,欢迎板砖。超子今天给大家介绍一下UNSUBSCRIBE报文。

5485b186edc514c4e8ad0ec71c2302eb.png

UNSUBSCRIBE报文

从上图中可知,UNSUBSCRIBE报文是单向的C->S,只能由我们发送给阿里云,用于取消对某一Topic的订阅,取消订阅之后就不会收到推送了。UNSUBSCRIBE报文包含固定报头、可变报头和负载。

2a7c0b62b2cc981e9590b157a734db20.png

UNSUBSCRIBE报文固定报头

上图是UNSUBSCRIBE报文固定报头格式,其中byte1是固定值0xA0,剩余长度需要确定可变报头和负载以后再定。

c8ddc6aaf39d0214532e4a1b6eb331bf.png

UNSUBSCRIBE报文可变报头

上图是UNSUBSCRIBE报文可变报头格式,只有2个字节的报文标识符,和订阅报文中的报文标识符是一个概念,如果忘记了,可以回看《阿里云物联网平台使用心得(23)MQTT协议详解报文标识符》一文,这里就不多说了,我们取个0x00 0x05。

UNSUBSCRIBE报文的负载,包含想要取消订阅的Topic字符串,而且字符串前还必须加上2个字节,表示Topic字符串长度,我们用一个实际的Topic作为例子,构建一下负载。

df48a0eba30bb225d2ed4d5f67d8ea68.png

设备TOPIC

上图是设备详情页面中物模型通信Topic列表,我们还用订阅时的例子,也就是红圈选中的这个Topic,我们取消对它的订阅。这个Topic字符串,一共是53个字节,换成简化的16进制,去掉0x,结果如下

2F 73 79 73 2F 61 31 32 64 54 49 72 6F 54 4A 43 2F 44 30 30 31 2F 74 68 69 6E 67 2F 65 76 65 6E 74 2F 70 72 6F 70 65 72 74 79 2F 70 6F 73 74 5F 72 65 70 6C 79

千万别忘了,在前面加入2个字节,表示长度53,那么简化的16进制,去掉0x,结果如下

00 35

最终的结果如下所示,总共是53+2=55个字节。

00 35 2F 73 79 73 2F 61 31 32 64 54 49 72 6F 54 4A 43 2F 44 30 30 31 2F 74 68 69 6E 67 2F 65 76 65 6E 74 2F 70 72 6F 70 65 72 74 79 2F 70 6F 73 74 5F 72 65 70 6C 79

这里要注意一点和订阅SUBSCRIBE报文的区别,订阅报文还需要一个字节设置服务质量等级,而UNSUBSCRIBE报文不需要这个字节 。

综上所述,可变报头和负载都已经确定,我们计算剩余长度=可变+负载=2+55=57,57/128=0,不需要进位,1个字节即可,简化的16进制,去掉0x是39,那么固定报头就是A0 39

最后固定+可变+负载,最终的UNSUBSCRIBE报文简化的16进制,去掉0x,结果如下

A0 39 00 05 00 35 2F 73 79 73 2F 61 31 32 64 54 49 72 6F 54 4A 43 2F 44 30 30 31 2F 74 68 69 6E 67 2F 65 76 65 6E 74 2F 70 72 6F 70 65 72 74 79 2F 70 6F 73 74 5F 72 65 70 6C 79

我们将该报文发给阿里云后,就可以取消对该Topic的订阅,然后阿里云会回复UNSUBACK报文,表示对取消订阅的回复,这个报文超子下次再给大家介绍。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值