在 MQTT 规范中,有一些连接标志来管理服务器和客户端上的保留和状态。
干净的会话规范建议:
3.1.2.4 清除会话位置:连接标志字节的第 1 位。
该位指定会话状态的处理。客户端和服务器可以存储会话状态,以使可靠的消息传递在一系列网络连接中继续。该位用于控制 Session 状态的生命周期。
如果 CleanSession 设置为 0,则服务器必须根据当前会话的状态(由客户端标识符标识)恢复与客户端的通信。如果没有与客户端标识符关联的会话,服务器必须创建一个新会话。客户端和服务器断开后,客户端和服务器必须存储会话 [MQTT-3.1.2-4]。
在将 CleanSession 设置为 0 的 Session 断开连接后,服务器必须存储更多的 QoS 1 和 QoS 2 消息,这些消息与客户端在断开连接时拥有的任何订阅相匹配,作为 Session 状态的一部分
因此,每当客户端在断开连接后再次连接时,代理都会中继所有未确认的 QoS-1 和 QoS-2 消息。所以,经纪人有一个状态。为了维护每个客户端的状态,服务器将使用一些数据库进行保留。有没有办法为这些消息状态(服务器将存储)提供生存时间。如何告诉代理丢弃(即不中继)任何早于的消息;让说5天。
基本上,我们希望使用干净的会话 = 0 和 QoS-1;但是如何用旧消息清除代理状态?不希望收到超过 5 天的旧消息,即使未确认。