发布消息有客户端发送到服务端,由服务端分发给相应的订阅者。每个发布消息与一个话题名称相关(及标题或通道)。

固定头

MQTT3.1 3.3 发布--发布消息 - 图2

剩余长度 包括可变头和负荷数据长度

可变头

话题名称

UTF编码字符串,不可包括通配符。

消息ID

QoS 1和QoS2级消息里存在,

MQTT3.1 3.3 发布--发布消息 - 图3

MQTT3.1 3.3 发布--发布消息 - 图4

负荷数据

包含要发布的数据。数据的内容和格式与应用相关, 支持0长度负荷数据

响应

发布消息响应基于QoS等级,具体如下

MQTT3.1 3.3 发布--发布消息 - 图5

QoS 0:

使得消息对任何感兴趣方都可获得

QoS 1

记录消息到永久存储,使得消息对任何感兴趣方都可获得,返回PUBACK消息给发送者

QoS 2

记录消息到永久存储,暂时不让对任何感兴趣方都可获得消息,返回PUBREC消息给发送者

3.4 PUBACK 发布确认

MQTT3.1 3.3 发布--发布消息 - 图6

剩余长度域:可变头长度,

可变头

MQTT3.1 3.3 发布--发布消息 - 图7

负荷:

无负荷数据

行为

客户端接收到PUBACK消息,丢弃原来的消息。

3.5 PUBREC-确认消息接收

PUBREC 为对发布消息的QoS等级2的响应。

MQTT3.1 3.3 发布--发布消息 - 图8

3.6 PUBREL—确认发布发送

PUBREL:发布者发送给服务端端的PUBREC消息的响应

MQTT3.1 3.3 发布--发布消息 - 图9

QoS level: 1

DUP FLAG : 0

Remain length field: 可变头:2字节

MQTT3.1 3.3 发布--发布消息 - 图10

负荷:无

行为:

当服务端接收到发布这的PUBREL消息,服务端就会使得相关订阅者可获得之前的消息,同时以同样的消息ID ,发送PUBCOMP消息给发布这。

当订阅者接收到服务端的PUBREL消息是,定义者是的订阅应用可获得消息同时发送PUBCOMP消息个服务器。

3.7 PUBCOMP—-确认发布接收(part 3)

PUBCOMP为服务端发送给发布者的PUBREL消息的响应,或者

服务端发送给订阅者的PUBREL消息响应。

QoS 等级: 无

可变头长度: 2字节

MQTT3.1 3.3 发布--发布消息 - 图11

Actions

客户端接收到PUBCOMP消息,丢弃原先已发布的消息,只发布一次到服务器。

画板