:::info

:::

订阅消息允许客户端注册一个后或多个感兴趣的服务话题名称。服务器将发送到这些话题的消息作为PUBLISH消息发送给客户端。订阅消息指定订阅者希望接收的发布消息的QoS等级。

MQTT 3.8 订阅(SUBSCRIBE) - 图1

QoS等级

订阅消息使用QoS等级1来确认多个订阅请求。响应的SUBACK消息有同样的消息ID匹配识别。

DUP flag: 置0

RETAIN flag: 未使用

Remaining length field: 负荷数据长度,为可变长度

可变头

可变头包括一个消息ID,因为SUBSCRIBE消息服务等级为1

MQTT 3.8 订阅(SUBSCRIBE) - 图2

负荷数据(Payload)

负荷数据包括一个客户端希望接收的话题名称列表,以及客户端希望接收的消息QoS等级。

字符串为UTF-编码,QoS等级占一个字节两位。话题字符串可能包括特殊通配符代表一系列话题。话题/QoS对在下面负荷示例中连续显示如下:

MQTT 3.8 订阅(SUBSCRIBE) - 图3

假设改QoS等级已授权,客户端可接收到小于等于该等级的发布消息

MQTT 3.8 订阅(SUBSCRIBE) - 图4

发布这决定做大消息发布QoS等级,订阅者可根据其情况降低QoS等级。

3.9 订阅响应(SUBACK)

SUBACK消息有服务端发送给客户端,确认接收到SUBCRIBE消息。

SUBACK包括一组授权的QoS等级,授权的QoS等级顺序和订阅消息中的话题名称顺序一致。

固定头

MQTT 3.8 订阅(SUBSCRIBE) - 图5

剩余长度

剩余长度包括负荷数据,为可变字节。

可变头

可变头中的ID与被确认的订阅消息中的ID一致

MQTT 3.8 订阅(SUBSCRIBE) - 图6

负荷数据

负荷包括一组授权的QoS等级,每个对应响应的订阅消息中的话题名称。

授权等级以自己为准

MQTT 3.8 订阅(SUBSCRIBE) - 图7

MQTT 3.8 订阅(SUBSCRIBE) - 图8

3.10 取消订阅

UNSUBSCRIBE由客户端发送到服务端,取消响应的指定话题。

固定头

MQTT 3.8 订阅(SUBSCRIBE) - 图9

QoS LEVEL

取消订阅消息使用QoS等级1,确认多个取消请求。

UNSUBACK 消息对应有消息识别。

Remaining Length

负荷数据长度,可变字节

可变头

取消订阅QoS等级为1, 其可变头包括消息ID。

MQTT 3.8 订阅(SUBSCRIBE) - 图10

负荷数据

客户端取消负荷列表中的话题名称,字符串为UTF编码。后台名称不压缩

MQTT 3.8 订阅(SUBSCRIBE) - 图11

UNSUBACK (取消订阅响应)

UNSUBACK消息由服务端发送给客户端,确认接收到取消订阅消息

MQTT 3.8 订阅(SUBSCRIBE) - 图12

剩余长度:

  1. 2字节

可变头

MQTT 3.8 订阅(SUBSCRIBE) - 图13