如何使用python客户机以随机方式而不是顺序地将每个mqtt客户机的多条随机消息发布到同一个代理?

2024-03-29 09:04:13 发布

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

这是我的python客户端代码,用于发布10个发布者的消息,我希望每个发布者不按顺序发送多条消息,例如客户端1可以发布一条消息,然后客户端5,然后客户端1可以再次发送另一条消息,然后客户端9,依此类推

import paho.mqtt.client as mqtt
import time
import os
import random

#variables
MQTT_HOST = "127.0.0.1"
MQTT_PORT = 1883
MQTT_KEEPALIVE_INTERVAL = 5
MQTT_TOPIC = "sampleTopic"
MQTT_MSG = "Hello MQTT"
publishers = []
num_publishers = 10


#Callback Functions
def on_log(client, userdata, level, buf):
    print("log: "+buf)

def on_connect(client, userdata, flags, rc):
    if rc == 0 :
        print("connected OK"+str(client))
        mqttc.publish(MQTT_TOPIC,MQTT_MSG)
    else:
        print("Bad connection returned code = ",rc)

def on_disconnect(client, userdata, flags, rc=0):
    print("Disconnected result code " +str(rc))

def on_message(client, userdata, msg):
    topic = msg.topic
    m_decode = str(msg.payload.decode("utf-8","ignore"))
    print("message received", m_decode)
       
def on_publish(client, userdata, mid):
    print("Message Published...")
    time.sleep(random.randint(3,9))# sleep for 10 seconds before next call
    
for i in range(num_publishers):
    #Initiate MQTT Client
    id = "Publisher "+str(i)
    client = mqtt.Client(id)
    publishers.append(client)
        
try:

    for mqttc in publishers:

        #Binding Callback Functions
        mqttc.on_connect = on_connect
        mqttc.on_disconnect = on_disconnect
        mqttc.on_message = on_message
        mqttc.on_publish = on_publish
        # mqttc.on_log = on_log

        #connect with MQTT broker
        mqttc.connect(MQTT_HOST,MQTT_PORT,MQTT_KEEPALIVE_INTERVAL)

        #loop network
        mqttc.loop_start()
        time.sleep(0.5)

    while True:
        pass

except KeyboardInterrupt:
   print("interrupted by keyboard")

os._exit(0)

我尝试了paho.mqtt.publish.multiple(),但它不符合我的要求


Tags: importclient消息客户端ondefconnectmqtt