MQTT 持久会话 vs. Clean Session内幕一网打尽
1 前言 不稳定的网络 有限的硬件资源 物联网应用两大难题,MQTT 客户端与服务器的连接可能随时因网络波动及资源限制而异常断开。为解决网络连接断开对通信造成的影响,MQTT 协议提供持久会话功能。 MQTT 客户端在发起到服务器的连接时,可设置是否创建一个持久会话。持久会话会保存一些重要数据,以使会话能在多个网络连接中继续。 2 作用 避免因网络中断导致需要反复订阅带来的额外开销 避免错过离线期间的消息 确保 QoS 1 和 QoS 2 的消息质量保证不被网络中断影响 3 持久会话需存储哪些数据? 通过上文我们知道持久会话需要存储一些重要的数据,以使会话能被恢复。这些数据有的存储在客户端,有的则存储在服务端。 客户端中存储的会话数据: 已发送给服务端,但是还没有完成确认的 QoS 1 与 QoS 2 消息 从服务端收到的,但是还没有完成确认的 QoS 2 消息 服务端中存储的会话数据: 会话是否存在,即使会话状态其余部分为空。 已发送给客户端,但是还没有完成确认的 QoS 1 与 QoS 2 消息。 等待传输给客户端的 QoS 0 消息(可选),QoS 1 与 QoS 2 消息。 从...
