第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何通過mqtt實(shí)現(xiàn)一個(gè)“郵箱”服務(wù)?

如何通過mqtt實(shí)現(xiàn)一個(gè)“郵箱”服務(wù)?

青春有我 2023-05-09 15:34:28
我是所有 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)這種模式?
查看完整描述

1 回答

?
慕婉清6462132

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超2個(gè)贊

問題按順序回答。

  • 不,輪詢完全違背了像 MQTT 這樣的發(fā)布/訂閱協(xié)議的意義

  • 你真的應(yīng)該client.loop()在一個(gè)循環(huán)中調(diào)用,它默認(rèn)只在提供的超時(shí)期限內(nèi)處理 1 個(gè)數(shù)據(jù)包。QOS 1 需要多個(gè)數(shù)據(jù)包才能完成傳送。

  • 調(diào)用client.loop(0.1)將阻塞 0.1 秒以等待傳入消息,然后返回。如果消息在 0.1 秒后到達(dá),它將駐留在操作系統(tǒng) TCP/IP 堆棧中,直到您client.loop()再次調(diào)用。如果您沒有定期調(diào)用它,那么代理將啟動(dòng)客戶端,因?yàn)?KeepAlive 測(cè)試將失敗??蛻舳搜h(huán)還處理發(fā)送所有訂閱消息。

  • 假設(shè)消息在 QOS > 0 時(shí)發(fā)布并且您已在 QOS > 0 時(shí)訂閱并且客戶端 ID 保持不變并且干凈會(huì)話為 false 代理應(yīng)該在訂閱者離線時(shí)傳遞和發(fā)布消息

  • 如前所述,您需要client.loop()為每條消息調(diào)用多次,因?yàn)槊總€(gè)喚醒周期您只調(diào)用一次。啟動(dòng)后臺(tái)線程將在您讓它運(yùn)行的時(shí)間長(zhǎng)度內(nèi)處理所有必需的消息。


查看完整回答
反對(duì) 回復(fù) 2023-05-09
  • 1 回答
  • 0 關(guān)注
  • 186 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)