【问题标题】:Failed Publish when subscribed to same topic as publisher?订阅与发布者相同的主题时发布失败?
【发布时间】:2015-11-26 21:24:12
【问题描述】:

我目前正在使用 mqtt 3.1.1 和 mosquitto broker 1.4.3 开发一个嵌入式 c 项目。我遇到的问题是当客户端板发布和订阅同一主题时,在随机数量的消息之后客户端被阻止并且连接超时。

我正在尝试通过 3G 网络发送 25 个字节的字符串消息。在 pub 和 sub 上使用 QOS2,我在客户端上尝试了不同的 keepalive 设置(15s 120s),并且在每条消息之间有延迟(2000ms 300000ms),在代理上我也尝试了不同的设置,但似乎没有任何效果,是否可以通过 3G 网络使用 QOS2 发送消息,还是我期望过高?

我们希望保证一些关键数据的传输,所以如果这在 mqtt 上是不可能的,是否有更好的选择?

【问题讨论】:

    标签: c embedded messaging mqtt mosquitto


    【解决方案1】:

    120ms 的 keepalive 听起来很假。

    Keepalive 可以让代理检测到客户端可能丢失,而无需等待 TCP 连接超时。您通常会在几秒(如果不是几分钟)的范围内使用保活。

    使用 120 毫秒的保活,您必须至少每 100 毫秒左右发送一个 PING 数据包(或在该时间范围内进行任何其他 MQTT 交换),因此它可能解释了为什么您在场景中引入了如此多的延迟 -并且可能也会杀死您的 3G 数据计划;-)

    我建议你开始使用 30 秒的 keep-alive 看看这是否会有所改善。

    【讨论】:

    • 抱歉打错了,我目前使用的是 ka=120s,客户端在仅发布或仅订阅时工作正常。问题是当客户端在同一主题上发布和订阅时。
    • 您的两个客户是否都使用相同的客户 ID?这可能是问题...
    • 是的,这是一个发布和订阅同一主题的客户端,这就是问题所在。也许它不能在单个客户端上完成?
    猜你喜欢
    • 2016-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-07
    • 1970-01-01
    • 2016-12-14
    • 2013-12-06
    • 1970-01-01
    相关资源
    最近更新 更多