五月十五日
paho-mqtt已知的一些限制
截止1.6.1版本,当 clean_session 为 False 时,session 只存储在内存中,不持久化。这意味着当客户端重新启动时(不仅仅是重新连接,通常是因为程序重新启动而重新创建对象)会话丢失。这可能导致消息丢失。
客户端会话的以下部分丢失:
已从服务器收到但尚未完全确认的 QoS 2 消息。
由于客户端将盲目地确认任何 PUBCOMP(QoS 2 事务的最后一条消息),它不会挂起但会丢失此 QoS 2 消息。
已发送到服务器但尚未完全确认的 QoS 1 和 QoS 2 消息。
这意味着传递给 publish() 的消息可能会丢失。这可以通过注意传递给 publish() 的所有消息都有相应的 on_publish() 调用来缓解。
这也意味着代理可能在会话中有 Qos2 消息。由于客户端从一个空会话开始,它不知道它并将重新使用中间。这还没有确定。
此外,当 clean_session 为 True 时,该库将在网络重新连接时重新发布 QoS > 0 消息。这意味着 QoS > 0 消息不会丢失。但是标准规定我们是否应该丢弃发送了发布数据包的任何消息。我们的选择意味着我们不符合标准,并且 QoS 2 有可能被接收两次。如果只需要一次交付的 QoS 2 保证,应该 clean_session = False

浙公网安备 33010602011771号