如何通过mqtt从多个客户端接收消息?

时间:2019-08-27 13:42:59

标签: python mqtt

我正在从一个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()

1 个答案:

答案 0 :(得分:0)

您误解了client回调中的on_message参数。

此值是到已订阅该主题的MQTT客户端的本地实例的链接。

MQTT消息不包含有关发布它们的客户端的任何信息,除非您将其明确编码为有效负载。 MQTT之类的发布/订阅协议的部分要点是使信息创建者(发布者)与信息消费者(订阅者)完全脱钩。

此外,您还应该将对client.subscribe("test")的调用移至on_connect()回调内部,因为您已经尝试将其每秒重新订阅同一主题10次,但是除了在代理上产生不必要的负载。