首页 > 解决方案 > 如何通过 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()

标签: pythonmqtt

解决方案


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

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

MQTT 消息不携带有关发布它们的客户端的任何信息,除非您将其显式编码到有效负载中。像 MQTT 这样的 Pub/Sub 协议的部分意义在于将信息创建者(发布者)与信息消费者(订阅者)完全分离。

此外,您应该将调用移至回调client.subscribe("test")内部,on_connect()因为当您拥有它时,您正试图每秒重新订阅同一个主题 10 次,除了在代理上产生不需要的负载外,这将一事无成。


推荐阅读