MQTT协议:特性、变体与安全实践
1. MQTT订阅与连接基础
- 订阅返回码 :MQTT订阅操作有不同的返回码,代表不同的订阅结果,具体如下表所示:
| 返回码 | 含义 |
| ---- | ---- |
| 0 | 订阅成功;最大QoS级别为0 |
| 1 | 订阅成功;最大QoS级别为1 |
| 2 | 订阅成功;最大QoS级别为2 |
| 128 | 订阅失败 |
订阅失败通常是由于主题名称格式错误或缺乏适当的访问权限。客户端可以随时通过向代理发送UNSUBSCRIBE数据包来取消订阅,代理会返回具有相同packetId的UNSUBACK数据包以确认取消订阅请求。
- 连接与会话 :在发送或接收消息之前,MQTT客户端需要与代理建立连接。连接会一直保持打开状态,直到客户端发送断开连接消息,除非网络问题导致连接中断。默认情况下,代理不会持久保存会话信息,这意味着订阅者每次连接时都需要重新建立订阅。不过,MQTT规范定义了持久会话的概念,使用持久会话时,代理会跟踪客户端的所有订阅,并在特定QoS级别下存储相关消息。
以下是使用持久会话的一些合理原因:
1. 解决方案涉及受限客户端,通过持久会话可以延长电池寿命或减少带宽消耗。
2. 使用场景要求订阅客户端不能错过任何一条消息。
3. 使用场景涉及“至少一次”(QoS 1)或“恰好一次”(QoS 2)的消息传递。
相反,对于仅发布消息(无订阅)且使用场景允许消息丢失的客户端,