UNSUBSCRIBE
3.10 UNSUBSCRIBE –取消订阅主题 Unsubscribe from topics
Unsubscribe from topics
客户端发送UNSUBSCRIBE
报文给服务端,用于取消订阅主题。
3.10.1 固定报头 Fixed header
Fixed header
图例3.28–UNSUBSCRIBE报文固定报头
位 Bit76543210byte 1MQTT控制数据包类型(10) MQTT Control Packet Type (10)保留位 Reserved10100000byte 2剩余长度 Remaining Length
UNSUBSCRIBE
报文固定报头的第3,2,1,0位是保留位且必须
分别设置为0,0,1,0。服务端必须
认为任何其它的值都视为格式错误并关闭网络连接[MQTT-3.10.1-1]。
剩余长度字段
=可变报头的长度(2字节)+有效负载的长度
3.10.2 可变报头
可变报头包含一个报文标识符。第2.3.1节提供了有关报文标识符的更多信息。
图例3.29 – UNSUBSCRIBE
报文可变报头
UNSUBSCRIBE
报文可变报头位 Bit76943210byte 1报文标识符的最高有效字节 Packet Identifier MSBbyte 2报文标识符的最低有效字节 Packet Identifier LSB
3.10.3 有效负载
UNSUBSCRIBE
报文的有效负载包含客户端希望取消订阅的主题过滤器列表。==UNSUBSCRIBE
报文中的主题过滤器必须
是连续打包的并按照1.5.3节定义的UTF-8编码字符串==[MQTT-3.10.3-1]。
==UNSUBSCRIBE
报文的有效负载必须
至少包含一个主题过滤器。没有有效负载的UNSUBSCRIBE
报文是违反协议的==[MQTT-3.10.3-2]。有关错误处理的更多信息请查看4.8节。
3.10.3.1 有效负载非规范示例 Payload non normative example
Payload non normative example
图例 3.30 -有效负载字节格式非规范示例 展示了 表格 3.7 -有效负载非规范示例 简要描述的UNSUBSCRIBE
报文的有效负载。
表格3.7-有效负载非规范示例
主题过滤器 Topic Filter“a/b”主题过滤器 Topic Filter“c/d”
##### 图例3.30-有效负载字节格式非规范示例
描述 Description76743210主题过滤器 Topic Filterbyte 1长度最高有效字节(0) Length MSB (0)00000000byte 2长度的最低有效字节(3) Length LSB (3)00000011byte 3‘a’ (0x61)01100001byte 4‘/’ (0x2F)00101111byte 5‘b’ (0x62)01100010主题过滤器 Topic Filterbyte 6长度最高有效字节(0) Length MSB (0)00000000byte 7长度的最低有效字节(3) Length LSB (3)00000011byte 8‘c’ (0x63)01100011byte 9‘/’ (0x2F)00101111byte 10‘d’ (0x64)01100100
3.10.4 响应 Response
Response
==UNSUBSCRIBE
报文提供的主题过滤器(无论是否包含通配符必须
与服务端持有的该客户端的当前主题过滤器集合逐个字符比较。如果有任何过滤器完全匹配,那么服务端的订阅将被删除,否则不会有进一步的处理==[MQTT-3.10.4-1]。
如果服务端删除了一个订阅:
==它
必须
停止分发任何新消息给这个客户端==[MQTT-3.10.4-2]。==它
必须
完成分发任何已经开始往客户端发送的QoS 1和QoS 2的消息==*[MQTT-3.10.4-3]。它
可以
继续发送缓存的现有消息给客户端
==服务端必须
发送UNSUBACK
报文响应客户端的UNSUBSCRIBE
请求。UNSUBACK
报文必须
包含和UNSUBSCRIBE
报文相同的报文标识符==[MQTT-3.10.4-4]。==即使没有删除任何主题订阅,服务端也必须
发送一个UNSUBACK
报文响应==*[MQTT-3.10.4-5]。
==如果服务端收到包含多个主题过滤器的UNSUBSCRIBE
报文,它必须
像收到了一系列的多个UNSUBSCRIBE
报文一样处理该报文,除非它只用发送一个UNSUBACK
报文。==[MQTT-3.10.4-6]。
Last updated