如何通過mqtt實(shí)現(xiàn)一個(gè)“郵箱”服務(wù)?
我是所有 mqtt 的新手,作為第一個(gè)練習(xí),我想通過持久的 mqtt 會(huì)話創(chuàng)建一個(gè)“郵箱”服務(wù)。激勵(lì)是一個(gè)低功耗 ESP8266 設(shè)備,它大部分時(shí)間都處于睡眠狀態(tài),并定期喚醒并檢查是否有任何待處理的命令。我嘗試使用 python 和 paho mqtt 在我的 Linux 主機(jī)上通過發(fā)送者和接收者來實(shí)現(xiàn)它。Mosquitto 作為代理在后臺(tái)運(yùn)行。首先是“mbox”發(fā)件人,它會(huì)在每次按下 Enter 時(shí)發(fā)送另一條消息。import paho.mqtt.client as mqtt broker_address='127.0.0.1'client = mqtt.Client('MBoxClient') client.connect(broker_address)counter = 1while True: print('Press Enter to send msg #'+str(counter)+': ', end='') if input().startswith('q'): break client.publish("mbox/mail","Hello "+str(counter), qos=1) counter += 1client.disconnect()print('done!')這是我的 mbox 接收器:import paho.mqtt.client as mqttimport timedef on_message(client, userdata, message): print("message:", message.topic + ': ' + str(message.payload.decode("utf-8")))print('I\'m listening for mbox messages!')broker_address="127.0.0.1"client_name='mbox'is_first=Truewhile 1: client = mqtt.Client(client_name, clean_session=is_first) is_first=False print("polling") client.on_message=on_message client.connect(broker_address) client.subscribe('mbox/#',qos=1) client.loop_start() time.sleep(0.1) # How long should this time be? client.loop_stop()# client.loop(0.1) # why doesn't this do the same action as the previous three lines? client.disconnect() time.sleep(5)盡管這可行,但我覺得我的解決方案非常駭人聽聞。client.loop_start()并client.loop_stop()創(chuàng)建另一個(gè)線程。但是當(dāng)我嘗試client.loop(0.1)這樣做時(shí),它沒有用。所以我的問題是:是否有直接輪詢消息的方法,而不是使用的間接方法loop_start();…;loop_stop()?如果 usingloop_start();time.sleep(t);loop_end()是慣用的,我怎么知道要睡多久?loop(0.1); instead of 為什么在我執(zhí)行l(wèi)oop_start()時(shí)接收器不工作;睡眠(0.1);循環(huán)停止()`?有什么不同?接收方是否保證收到所有消息?有沒有更好的方法來實(shí)現(xiàn)這種模式?
查看完整描述