Netty实现高性能IOT服务器(Groza)之手撕MQTT协议篇上 (7)

主题名必须是PUBLISH报文可变报头的第一个字段。它必须是 1.5.3节定义的UTF-8编码的字符串。

PUBLISH报文中的主题名不能包含通配符 。

服务端发送给订阅客户端的PUBLISH报文的主题名必须匹配该订阅的主题过滤器(根据 4.7节定义的匹配过程)。

报文标识符 Packet Identifier

只有当QoS等级是1或2时,报文标识符(Packet Identifier)字段才能出现在PUBLISH报文中。2.3.1节提供了有关报文标识符的更多信息。

有效载荷

有效载荷包含将被发布的应用消息。

数据的内容和格式是应用特定的。有效载荷的长度这样计算:用固定报头中的剩余长度字段的值减去可变报头的长度。包含零长度有效载荷的PUBLISH报文是合法的。

响应

PUBLISH报文的接收者必须按照根据PUBLISH报文中的QoS等级发送响应。

服务质量等级 预期响应
QoS 0   无响应  
QoS 1   PUBACK报文  
QoS 2   PUBREC报文  
PUBACK –发布确认

PUBACK报文是对QoS 1等级的PUBLISH报文的响应。

剩余长度字段

表示可变报头的长度。对PUBACK报文这个值等于2.

可变报头

包含等待确认的PUBLISH报文的报文标识符。

有效载荷

PUBACK报文没有有效载荷。

PUBREC – 发布收到(QoS 2,第一步)

PUBREC报文是对QoS等级2的PUBLISH报文的响应。它是QoS 2等级协议交换的第二个报文。

剩余长度字段

表示可变报头的长度。对PUBREC报文它的值等于2。

可变报头

可变报头包含等待确认的PUBLISH报文的报文标识符。

有效载荷

PUBREC报文没有有效载荷。

Netty实现

 

MqttMessage pubRecMessage = MqttMessageFactory.newMessage( new MqttFixedHeader(MqttMessageType.PUBREC, false, MqttQoS.AT_MOST_ONCE, false, 2), MqttMessageIdVariableHeader.from(variableHeader.messageId()), null);

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsffgz.html