import time import paho.mqtt.client as mqtt broker = '121.40.129.71' def on_publish(client, userdata, mid, reason_code, properties): # reason_code and properties will only be present in MQTTv5. It's always unset in MQTTv3 print(f"mid: {mid}, reason_code: {reason_code}, properties: {properties}") # mid: 消息ID, reason_code: 返回码, properties: 属性 def on_connect(client, userdata, flags, rc, properties): if rc.is_failure: print(f"连接失败: {rc}. loop_forever()将重新连接") else: print(f'连接成功: {rc}') client.subscribe('host_status/#') # unacked_publish = set() mqttc = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2, client_id="book_1") mqttc.on_publish = on_publish mqttc.on_connect = on_connect # mqttc.user_data_set(unacked_publish) mqttc.connect(broker, 48835, 60) # mqttc.loop_start() while True: if not mqttc.is_connected(): print("连接断开,重新连接") mqttc.connect(broker, 48835, 60,) keys = input("输入任意键发送消息,输入q退出:") if keys == 'q': break mqttc.loop(timeout=1.0) # Our application produce some messages msg_info = mqttc.publish("tts/1", keys, qos=1) # unacked_publish.add(msg_info.mid) # msg_info2 = mqttc.publish("host_status", "my message2", qos=1) # unacked_publish.add(msg_info2.mid) # # Wait for all message to be published # while len(unacked_publish): # time.sleep # Our application produce some messages # msg_info = mqttc.publish("host_status", "my message", qos=1) # # unacked_publish.add(msg_info.mid) # # msg_info2 = mqttc.publish("host_status", "my message2", qos=1) # # unacked_publish.add(msg_info2.mid) # # Wait for all message to be published # while len(unacked_publish): # time.sleep(0.1) # Due to race-condition described above, the following way to wait for all publish is safer # msg_info.wait_for_publish() # msg_info2.wait_for_publish() # mqttc.disconnect() mqttc.loop_stop()