c - 订阅与发布者相同的主题时发布失败?

标签 c embedded messaging mqtt mosquitto

我目前正在使用 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/

相关文章:

c - 在重新启动的服务器上使用 connect() 重新连接返回 - 传输端点已连接

c - Renesas 编译错误符号 _FunctionName 多重定义

c - 跳过不兼容的错误

c - Haskell二叉树快速实现

客户端无法绑定(bind)到给定端口并连接到给定服务器

c - 如何在编译期间检查 C 函数的有效输入?

c - 函数内联使用更多的 RAM 还是 ROM?对微 Controller 的 RAM 有什么影响?

mongodb - RabbitMQ 在写入 MongoDb 之前将消息排队

spring - 父类(super class)没有空构造函数,但没有给出参数。 Spring 集成

c++ - 使用 sendmessage 将 wm_close 发送到另一个进程