UNSUBSCRIBE

3.0 CONTENT – 目录

3.10 UNSUBSCRIBE –取消订阅主题 Unsubscribe from topics

客户端发送UNSUBSCRIBE报文给服务端,用于取消订阅主题。

3.10.1 固定报头 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报文可变报头

位 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

图例 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

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