我刚刚从mosquitto 1.4.5更改为1.5的过程中注意到,由于以下理由, retry_interval 变量已被删除。写在change_log.txt中。参见github link。
可以通过考虑何时 可能已经超时。
如果连接不可靠且已断开但没有一端 注意,重新连接时将重试消息。正在发送 其他PUBLISH或PUBREL不会更改任何内容。
如果客户端超载/无法响应/连接缓慢,则 发送其他发布或发布不会帮助客户端捕获 起来一旦积压清除,客户端将做出响应。如果不是 能够赶上,发送其他副本也无济于事。
删除的理由是,如果客户端超负荷并且仍然无法响应,则无需重新发送。但是根据Oasis中协议的QoS 1和2定义。 mqtt-v3.1.1-os
4.4邮件传递重试
当客户端在CleanSession设置为0的情况下重新连接时,客户端和服务器都必须重新发送所有未确认的信息 PUBLISH数据包(QoS> 0)和PUBREL数据包使用它们 原始数据包标识符。
我尝试读取源代码更改,但确实删除了重试。我得到了更改的合理性,但是它没有违反软件的协议合规性吗?如果网络长时间不可用,重试发送将毫无用处,但是如果网络故障是间歇性的,则删除重试会使QoS> 0对该代理不可靠吗?
答案 0 :(得分:2)
retry_interval选项控制在正常操作期间未确认消息的情况,即客户端似乎没有断开连接但未发送确认。
规范中讨论的消息传递重试涵盖了客户端重新连接的情况。 Mosquitto中存在此行为,因此不违反规范,并且将重试消息。