亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

MQTT:無法同時在同一個文件中發送和接收消息

MQTT:無法同時在同一個文件中發送和接收消息

嚕嚕噠 2022-11-09 16:47:13
我編寫了一個代碼,可以在同一個 python 文件中進行發布和訂閱。我的目標是能夠無休止地向燈發送色溫并接收其狀態(開/關或在線/離線)。但是,當我運行代碼時,我可以向燈發送消息,但我什么也沒收到(請注意,發布者和訂閱者分別工作得很好)import paho.mqtt.client as mqttimport sysimport timetopic = "testtopic/3" topic_casa = "testtopic/1"def on_connect(client, userdata, flags, rc):    print("Connection to the broker. Result : "+str(rc))    client.subscribe(topic_casa, qos=1)    client.publish(topic, light.circadianLight())def on_message(client, userdata, msg):    Message = str(msg.payload)    print("[MSG RECEBIDA] Topico: "+msg.topic+" / Mensagem: "+Message)def on_publish(client,userdata,result):     client.publish(topic, light.circadianLight())    time.sleep(10)def on_disconnect(client, userdata, rc):    if rc != 0:        print("Unexpected disconnection.")  try:    print("[STATUS] Inicializando MQTT...")    #inicializa MQTT:    client = mqtt.Client()    client.username_pw_set(username, password)    client.on_connect     = on_connect    client.on_message     = on_message    client.on_disconnect  = on_disconnect    client.on_publish = on_publish #with this callback we won't be able to #receive messages    client.connect(Broker, PortaBroker, KeepAliveBroker)    client.loop_forever()except KeyboardInterrupt:    print ("\nCtrl+C pressionado, encerrando aplicacao e saindo...")    sys.exit(0)
查看完整描述

1 回答

?
白衣非少年

TA貢獻1155條經驗 獲得超0個贊

問題有兩個方面,首先是您time.sleep(10)on_publish()回調中調用。

這會阻塞 MQTT 客戶端網絡循環,因此每次發布消息時它都不會在 10 秒內發送/接收任何消息。

您不應在任何 MQTT 客戶端回調中執行任何阻塞或長時間運行的任務。

另一個問題是,如果沒有睡眠,客戶端將花費所有時間發布消息(因為每次它完成發布消息時都會觸發on_publish()回調,從而啟動另一個發布。它永遠不會處理傳入的消息。

如果您想定期發布消息,那么您需要啟動一個單獨的線程來執行此操作,而不是嘗試在回調中執行此操作。


查看完整回答
反對 回復 2022-11-09
  • 1 回答
  • 0 關注
  • 186 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號