我目前正在使用 mqtt 3.1.1 和 mosquitto Broker 1.4.3 开发一个嵌入式 C 项目。我遇到的问题是,当客户端板发布并订阅同一主题时,在随机数量的消息之后,客户端被阻止并且连接超时。
我正在尝试通过 3G 网络发送一条 25 字节的字符串消息。在发布和订阅上使用 QOS2,我在客户端上尝试了不同的保持事件设置(15s <-> 120s),并且每条消息之间有延迟(2000ms <-> 300000ms),在代理上我也尝试了不同的设置,但似乎没有任何效果,是否可以通过 3G 网络使用 QOS2 发送消息,还是我期望过高?
我们希望保证一些关键数据的传输,因此如果这在 mqtt 上不可能实现,是否有更好的替代方案?
最佳答案
120ms 的 keepalive 听起来很假。
Keepalive 可以让代理检测到客户端可能已丢失,而无需等待 TCP 连接超时。您通常会在几秒甚至几分钟内使用保活。
如果保持事件时间为 120 毫秒,您必须至少每 100 毫秒左右发送一个 PING 数据包(或在该时间范围内进行任何其他 MQTT 交换),因此这可能可以解释为什么您在场景中引入如此多的延迟 -并且可能还会终止您的 3G 数据计划;-)
我建议您开始使用 30 秒的保持事件状态,看看是否会有所改善。
关于c - 订阅与发布者相同的主题时发布失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33947215/