当前位置: 首页 > 知识库问答 >
问题:

无法在Python中接收所有MQTT消息

楚冷勋
2023-03-14
client = mqtt.Client('DataReaderPub')
client.connect('127.0.0.1', 1883, 60)
print("MQTT parameters set.")

# Read from all files
count = 0
for i in range(1,51):
    payload = "Hello world" + str(count)
    client.publish(testtopic, payload, int(publisherqos))
    client.loop()
    count = count+1
    print(count, ' msg sent: ', payload)
    sleep(0.1)
subclient = mqtt.Client("DynamicDetectorSub")
subclient.on_message = on_message
subclient.connect('127.0.0.1')

subclient.subscribe(testtopic, int(subscriberqos))

subclient.loop_forever()

mosquitto.conf将最大飞行消息设置为0,持久性为true。

发布服务器QOS=2

用户QOS=2

保持活力=60

还有其他参数我应该看吗?

共有1个答案

沃侯林
2023-03-14

您还需要调用publisher中的network loop函数,这样客户机实际上有一些时间来执行IO(以及QOS2的双重握手)。

在客户端中调用client.publish()之后添加client.loop():

import paho.mqtt.client as mqtt
import time

client = mqtt.Client('DataReaderPub')
client.connect('127.0.0.1', 1883, 60)
print("MQTT parameters set.")

# Read from all files
count = 0
for i in range(1,51):
    payload = "Hello world" + str(count)
    client.publish("test", payload, 2)
    client.loop()
    count = count+1
    print(count, ' msg sent: ', payload)
    time.sleep(0.1)

订户代码:

import paho.mqtt.client as mqtt

def on_message(client, userdata, msg):
  print(msg.topic + " " + str(msg.payload))

subclient = mqtt.Client("DynamicDetectorSub")
subclient.on_message = on_message
subclient.connect('127.0.0.1')

subclient.subscribe("test", 2)

subclient.loop_forever()
 类似资料:
  • (如这张图所示,我有5条消息可用,但我只能收到2条消息。) 我试图删除收到的两条消息中的一条,然后再次轮询。删除的没有了,我收到了新的消息。但总共还是2条消息。

  • 我试图让一些基于PAHO的客户机使用Vert.x MQTT服务器。我试图发布到我的接收客户端订阅的测试主题。我很难从客户端发布者向客户端订阅者发送消息。 使用我在Internet上看到的真实例子,我构建了一个MQTT代理。vert.x MQTT代理代码的代码如下所示: 我很确定我在这里错过了什么,但我想不出会是什么。有人能帮我把这个弄好吗??? 提前感谢您的任何帮助或见解。

  • null 有人帮忙吗? 谢谢,拉胡尔

  • 我正在使用Mosquitto(现在是Paho)python MQTT客户机连接到HiveMQ代理。代码是非常基本的,摘自他们的文档--https://pypi.python.org/pypi/paho-MQTT 这里的QoS也是2。 QoS的这种修改导致订户只接收到20条消息。经过进一步探讨,我意识到问题可能是由于,这是一个选项函数,它设置了QoS>0的消息的最大数量,这些消息可以同时通过网络流的

  • null 但是,我发现代理在重新连接时不会向客户机发送任何东西。 这就是我如何测试的:使用上面提到的四个参数将客户机连接到代理。用QOS=1订阅感兴趣的主题断开客户端 使用另一个客户端程序和另一个客户端id,连接到代理将消息发布到由现在脱机的客户端订阅的同一主题。请等待几秒钟,现在使用与以前相同的连接设置重新连接脱机客户端。

  • 我想创建一个电报机器人,向添加它的组/频道发送更新。我用BotFather创建了一个机器人https://api.telegram.org/bot 现在这不是问题,但随着时间的推移,json文件可能会变得非常大,并可能造成问题。 有没有办法让我无法获得json中的所有消息都存在于