Clean Session Flag
控制 Session 的状态. (Session State)
Session State 用户确保在客户端和服务器之间的多个连接中可靠的传输消息。
Clean Session = 0
当 CleanSession = 0, 服务器必须复用和当前连接绑定的 Session 状态。
Session 用 Client Id 表示。
如果服务器没有于当前客户端关联的 Session 状态,那么它需要为当前连接创建一个新的 Session。
在客户后连接断开之后,服务器和客户端都需要保存当前 Session 的状态。
当一个连接断开后,服务器必须保存后续的和当前 Session 所订阅的主题匹配的所有 QoS 1 和 QoS 2 消息。这些信息作为 Session 状态的一部分保存下来。
服务器可以同时保存相应的 QoS 0 消息,但是这是一个可选的,不是必须的。
Clean Session = 1
当 CleanSession=1, 服务器和客户端需要抛弃之前的 Session 状态,重新创建一个 Session。
这个 Session 的一直持续到当前连接断开。
连接断开后,Session 状态需要被清空,不能在接下来的连接中复用。
Client Session State
- 所有已经发送的 QoS 1 和 QoS 2 消息,并且还没有收到对应的 ACK 消息。
- 所有已经发送的 QoS 2 消息,但是还没有被完全 ACK。(收到响应的 PUBCOMP 消息)
Server Session State
- 是否有与当前客户端关联的 Session, 即使 Session 状态是空的
- 客户端所有订阅的主题
- 所有已经发送到客户端的 QoS 1 和 QoS 2 消息,并且这些消息还没有收到相应的 ACK 消息。
- 所有等待被发送到客户端的 QoS 1 和 QoS 2 消息。
- 从客户端收到的 QoS 2 消息,还没有完全 ACK。
- 可选的, 等待被发送到客户端的 QoS 0 消息。
Retained message 不是 Session 状体的一部分。 即使 Session 结束了,也不能删除这些消息。