【问题标题】:Not receiving messages with subscribe using Paho MQTT使用 Paho MQTT 订阅未接收消息
【发布时间】:2020-07-05 13:57:12
【问题描述】:

我在使用 paho mqtt 库订阅 MQTT 代理(使用带有端口 1883 的 test.mosquitto.org)时遇到问题。当我使用 mosquitto_sub 客户端时,我可以正常接收消息,但是当我在我的 Python 脚本中订阅相同的主题时,回调永远不会被执行。

import paho.mqtt.client as mqtt

client_get = mqtt.Client(client_id='my_client', protocol=mqtt.MQTTv31)
client_get.connect('test.mosquitto.org', 1883)
client_get.loop_start()

def callback(client, userdata, message):
    print(str(message.payload.decode("utf-8")))

client_get.on_message = callback
client_get.subscribe(topic, qos=1)

【问题讨论】:

  • 这就是你的全部代码吗?因为就目前而言(假设您将topic 替换为代表真实主题的字符串)这将立即退出,因为loop_start() 不会启动守护线程,因此如果没有其他内容,它将不会使脚本保持活动状态。
  • 我只想订阅我的主题(字符串)并在有人发布到主题时打印消息,所以是的,它需要保持脚本处于活动状态。

标签: python mqtt mosquitto paho


【解决方案1】:

尝试以下方法:

import paho.mqtt.client as mqtt

client_get = mqtt.Client(client_id='my_client', protocol=mqtt.MQTTv31)
client_get.connect('test.mosquitto.org', 1883)

def callback(client, userdata, message):
    print(str(message.payload.decode("utf-8")))

client_get.on_message = callback
client_get.subscribe(topic, qos=1)
client_get.loop_forever()

我已将start_loop() 移至末尾并将其更改为loop_forever(),这将阻止并保持脚本运行。

【讨论】:

  • 是的,只有当您有另一个任务保持进程处于活动状态时,您才应该使用 start_loop。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-11
  • 2016-04-10
  • 1970-01-01
相关资源
最近更新 更多