如何通过mqtt接收来自多个客户机的消息?

2024-04-20 04:41:51 发布

您现在位置:Python中文网/ 问答频道 /正文

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

Tags: import脚本client消息message客户机timeon
1条回答
网友
1楼 · 发布于 2024-04-20 04:41:51

您误解了on_message回调中的client参数是什么。你知道吗

此值是指向已订阅主题的MQTT客户机的本地实例的链接。你知道吗

MQTT消息不携带关于发布它们的客户机的任何信息,除非您将其显式编码到有效负载中。像MQTT这样的Pub/Sub协议的一部分要点是将信息创建者(发布者)与信息使用者(订阅者)完全解耦。你知道吗

此外,您还应该将对client.subscribe("test")的调用移动到on_connect()回调内部,因为您正在尝试每秒10次重新订阅同一主题,这将完全没有任何效果,只会在代理上生成不需要的负载。你知道吗

相关问题 更多 >