2016-04-21 40 views

回答

0

需要對一些事物的網絡環路:

  1. 爲了應對收到的消息
  2. 要發送永葆
  3. 要處理需要額外的數據包連接所需的Ping報文高QOS
  4. 發送該佔用多於一個的網絡分組(比本地MTU大例如)消息

只有在消息速率較低(每個存活期間少於1 msg)時才需要ping消息。

鑑於你可以在一個單獨的線程在後臺啓動網絡環路這些日子裏,我會建議無論

0

啓動它爲了擴大在什麼@hardillb說了一下,他的觀點2「送平安只有當您發佈的速率不足以與您在連接時設置的Keepalive相匹配時,才需要保持連接處於活動狀態所需的數據包「。換句話說,客戶完全有可能永遠不需要發送PINGREQ,因此永遠不需要接收PINGRESP。

但是,更重要的一點是,不可能保證調用publish()將實際完成發送消息而不使用網絡循環。它可能在某些時候有效,但可能無法在任何時候完成發送消息。

客戶端的下一個版本將允許你這樣做:

m = mqttc.publish("class", "bar", qos=2) 
m.wait_for_publish() 

但這將要求,網絡環路是在一個單獨的線程進行處理,與loop_start()

+0

我將繼續按照建議使用網絡迴路。但是請注意,有很多浮動在網上的例子(在教程等中)不使用它。也許還沒有讓足夠多的人受到傷害。不知道是否默認應該啓動它,並強制人們手動關閉它。現在是什麼顛倒了。 – fickas

+0

是的,很多人沒有閱讀文檔:(我不打算通過改變行爲來打破向後兼容性,對於不處理循環的人來說,它只會是一個惱人的偶然錯誤。 – ralight