MQTT控制报文格式 -- UNSUBSCRIBE– 客户端取消订阅请求

发布时间 2023-10-17 09:10:21作者: aimigi

客户端向服务器发送取消订阅数据包,以取消订阅主题。

1. 固定包头 Fixed header

Bit

7

6

5

4

3

2

1

0

byte 1

MQTT Control Packet type (10)

Reserved

 

1

0

1

0

0

0

1

0

byte 2

Remaining Length

2. 可变包头 Variable header

可变包头用来传输 数据包标识符 PacketIdentifier

Bit

7

6

5

4

3

2

1

0

byte 1

Packet Identifier MSB

byte 2

Packet Identifier LSB

3. 载荷 Payload

UNSUBSCRIBE 数据包的Payload包含客户端希望取消订阅的主题过滤器列表。 用UTF-8编码。
UNSUBSCRIBE 数据包的有效负载必须包含至少一个主题过滤器。 没有有效负载的 UNSUBSCRIBE 数据包违反协议。

示例:

Topic Filter

“a/b”

Topic Filter

“c/d”

Payload 编码为:

 

Description

7

6

5

4

3

2

1

0

Topic Filter

byte 1

Length MSB (0)

0

0

0

0

0

0

0

0

byte 2

Length LSB (3)

0

0

0

0

0

0

1

1

byte 3

‘a’ (0x61)

0

1

1

0

0

0

0

1

byte 4

‘/’ (0x2F)

0

0

1

0

1

1

1

1

byte 5

‘b’ (0x62)

0

1

1

0

0

0

1

0

Topic Filter

byte 6

Length MSB (0)

0

0

0

0

0

0

0

0

byte 7

Length LSB (3)

0

0

0

0

0

0

1

1

byte 8

‘c’ (0x63)

0

1

1

0

0

0

1

1

byte 9

‘/’ (0x2F)

0

0

1

0

1

1

1

1

byte 10

‘d’ (0x64)

0

1

1

0

0

1

0

0

4. 响应处理 Response

  • 服务器收到数据包后与UNSUBSCRIBE 中的Topic Filter 进行比对,如果匹配,则删除,否则不做任何处理。
  • 如果服务器删除成功,则停止添加发布该主题消息给客户端
  • 必须要完成已经开始发送到客户端的任何 QoS1 或 QoS2消息的传递
  • 服务端必须发送UNSUBACK数据包来响应UNSUBSCRIBE 的请求。
  • UNSUBACK数据包必须具有与UNSUBSCRIBE 相同的PacketIdentifier