我正在从一个python脚本的多个客户端同时发送大量消息,并尝试在另一个脚本上接收它们。我得到的问题是,仅从连接的第一个客户端接收到了消息,并不断循环遍历它。 我需要的是,我可以从每个客户端以发布它们的方式获得消息。
import paho.mqtt.client as mqtt
import time
def on_connect(client, userdata, flags, rc):
if rc == 0:
print("Connected to broker")
global Connected
Connected = True
else:
print("Connection failed")
def on_message(client, userdata, message):
print ("Message received: " + str(message.payload) + " from " + str(client))
Connected = False
client = mqtt.Client()
client.on_connect= on_connect
client.on_message= on_message
client.connect(host)
client.loop_start()
while Connected != True:
time.sleep(0.1)
client.subscribe("test")
print("subscribed")
client.loop_stop()
答案 0 :(得分:0)
您误解了client
回调中的on_message
参数。
此值是到已订阅该主题的MQTT客户端的本地实例的链接。
MQTT消息不包含有关发布它们的客户端的任何信息,除非您将其明确编码为有效负载。 MQTT之类的发布/订阅协议的部分要点是使信息创建者(发布者)与信息消费者(订阅者)完全脱钩。
此外,您还应该将对client.subscribe("test")
的调用移至on_connect()
回调内部,因为您已经尝试将其每秒重新订阅同一主题10次,但是除了在代理上产生不必要的负载。