【问题标题】:Paho-mqtt.client can connect to digital-ocean mqtt server but cannot subscribePaho-mqtt.client 可以连接到 digital-ocean mqtt 服务器但不能订阅
【发布时间】:2015-07-27 11:55:32
【问题描述】:

请帮我解决这个问题。我在这上面花了两天时间,但没有成功。

我正在使用 Paho-Mqtt python 客户端示例。我的 digitalocean debian 服务器上也有 HiveMq mqtt 服务器。 如果我在笔记本电脑或 linux Debian 机器上运行,python 中的客户端示例代码可以连接并订阅 digitalocean 服务器。但。这是但是。当我在 digitalocean 服务器(hivemq mqtt 服务器所在的位置)上运行客户端时,它只能连接而不能订阅!我同时使用了 localhost 和服务器 IP,但仍然没有运气。

但是,在 digitalocean 服务器(以及 hivemq mqtt 服务器)上运行的相同客户端代码可以成功连接和订阅外部服务器,例如 m2m.eclipse.org。

我怎么知道它不是订阅而是连接?好吧,它在连接回调时返回 RC:0,但在订阅回调时不返回任何内容。 (它应该返回“订阅:1”等)

总结: Clinet 与服务器在同一台机器上运行时可以连接但不能订阅。

【问题讨论】:

  • 您能否提供任何实际的详细信息,例如代码或您正在做什么,以便有人可以提供帮助?目前这是一个非常模糊的问题。
  • @ralight 我正在使用 paho 项目中提供的 sub.py 示例。我根本没有改变代码(除了ip地址和主题)。
  • 如果 sub.py 上的 on_log 函数没有为您提供任何线索,那么您必须查看 HiveMq 日志。
  • 您可以将您正在使用的代码添加到问题中吗?您使用哪个版本的 HiveMQ?
  • 我使用的是最新版本的 HiveMQ。我最终删除了 HiveMQ 并改用 Mosquitto。现在一切都解决了。血腥的 HiveMQ 是导致此问题的原因。它浪费了我的 2-3 天......谢谢你们的帮助

标签: debian mqtt digital-ocean paho hivemq


【解决方案1】:

问题似乎是 sub.py 示例(来自此处:http://git.eclipse.org/c/paho/org.eclipse.paho.mqtt.python.git/tree/examples/sub.py)似乎不正确。它不会在 on_connect 回调中执行订阅,而是在连接后直接执行。我的理解是,connect() 方法不会阻塞 connack。

如果你睡觉,你可以自己验证这一点,例如连接后一秒钟。

所以只需在 on_connect 回调中调用 subscribe()。

Paho 官方页面显示了如何正确执行此操作,请参阅此处的入门页面:https://eclipse.org/paho/clients/python/

这个错误代码适用于 mosquitto 而不是 HiveMQ 的原因是,mosquitto 是单线程的,而 HiveMQ 是异步和多线程的。所以连接和订阅可以并行执行,您最可能希望顺序行为,这就是您必须使用 on_connect() 回调的原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-10
    • 1970-01-01
    • 1970-01-01
    • 2019-08-06
    • 2017-02-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多