5. MQTT消息类型详解(三)
9 SUBACK消息
9.1 消息结构
SUBACK消息是订阅确认消息,格式如下:
+-------------------------------+
| 消息类型(1字节) |
+-------------------------------+
| 保留标志(1字节) |
+-------------------------------+
| QoS等级(2字节) |
+-------------------------------+
| 保留标志(1字节) |
+-------------------------------+
| 消息剩余长度(2字节) |
+-------------------------------+
| 消息ID(2字节) |
+-------------------------------+
| 主题QoS等级(1字节) |
+-------------------------------+
9.2 使用场景
- 订阅确认:代理确认客户端的订阅请求,返回主题的QoS等级。
- 状态反馈:提供订阅成功或失败的反馈。
9.3 示例
消息类型:9
保留标志:0
QoS等级:0
消息剩余长度:4
消息ID:1
主题QoS等级:1
10 UNSUBSCRIBE消息
10.1 消息结构
UNSUBSCRIBE消息用于客户端向代理发送取消订阅请求,格式如下:
+-------------------------------+
| 消息类型(1字节) |
+-------------------------------+
| 保留标志(1字节) |
+-------------------------------+
| QoS等级(2字节) |
+-------------------------------+
| 保留标志(1字节) |
+-------------------------------+
| 消息剩余长度(2字节) |
+-------------------------------+
| 消息ID(2字节) |
+-------------------------------+
| 主题长度(2字节) |
+-------------------------------+
| 主题(字符串) |
+-------------------------------+
10.2 使用场景
- 取消订阅:客户端向代理发送取消订阅的主题请求。
- 更新订阅列表:支持动态取消订阅多个主题。
10.3 示例
消息类型:10
保留标志:0
QoS等级:0
消息剩余长度:6
消息ID:1
主题长度:6
主题:sensor/temperature
11 UNSUBACK消息
11.1 消息结构
UNSUBACK消息是取消订阅确认消息,格式如下:
+-------------------------------+
| 消息类型(1字节) |
+-------------------------------+
| 保留标志(1字节) |
+-------------------------------+
| QoS等级(2字节) |
+-------------------------------+
| 保留标志(1字节) |
+-------------------------------+
| 消息剩余长度(2字节) |
+-------------------------------+
| 消息ID(2字节) |
+-------------------------------+
11.2 使用场景
- 取消订阅确认:代理确认客户端的取消订阅请求。
- 状态反馈:提供取消订阅成功或失败的反馈。
11.3 示例
消息类型:11
保留标志:0
QoS等级:0
消息剩余长度:2
消息ID:1
12 PINGREQ消息
12.1 消息结构
PINGREQ消息是心跳请求消息,格式如下:
+-------------------------------+
| 消息类型(1字节) |
+-------------------------------+
| 保留标志(1字节) |
+-------------------------------+
| QoS等级(2字节) |
+-------------------------------+
| 保留标志(1字节) |
+-------------------------------+
| 消息剩余长度(2字节) |
+-------------------------------+
12.2 使用场景
- 心跳检测:客户端定期发送PINGREQ消息,检查代理是否在线。
- 保持连接:防止因网络不稳定而丢失连接。
12.3 示例
消息类型:12
保留标志:0
QoS等级:0
消息剩余长度:0
13 PINGRESP消息
13.1 消息结构
PINGRESP消息是心跳响应消息,格式如下:
+-------------------------------+
| 消息类型(1字节) |
+-------------------------------+
| 保留标志(1字节) |
+-------------------------------+
| QoS等级(2字节) |
+-------------------------------+
| 保留标志(1字节) |
+-------------------------------+
| 消息剩余长度(2字节) |
+-------------------------------+
13.2 使用场景
- 心跳响应:代理响应客户端的PINGREQ消息,确认连接状态。
- 连接保持:确保客户端和代理之间的连接保持活跃。
13.3 示例
消息类型:13
保留标志:0
QoS等级:0
消息剩余长度:0
14 DISCONNECT消息
11 消息结构
DISCONNECT消息用于客户端断开连接的请求,格式如下:
+-------------------------------+
| 消息类型(1字节) |
+-------------------------------+
| 保留标志(1字节) |
+-------------------------------+
| QoS等级(2字节) |
+-------------------------------+
| 保留标志(1字节) |
+-------------------------------+
| 消息剩余长度(2字节) |
+-------------------------------+
12 使用场景
- 连接断开:客户端主动请求断开与代理的连接。
- 清理资源:完成数据传输后,释放连接资源。
13 示例
消息类型:14
保留标志:0
QoS等级:0
消息剩余长度:0
本章详细介绍了MQTT协议中的各类消息类型,包括CONNECT、CONNACK、PUBLISH、PUBACK、PUBREC、PUBREL、PUBCOMP、SUBSCRIBE、SUBACK、UNSUBSCRIBE、UNSUBACK、PINGREQ、PINGRESP和DISCONNECT。每种消息类型的结构和使用场景已经详细讲解,帮助开发者更好地理解和应用MQTT协议。