2013-10-16 59 views
0

使用python,mosquitto(mqtt)庫,編寫mqtt reconnect命令的正確方法是什麼?mqtt重新連接的正確語法是什麼?

我累了下面,但那不行......我錯過了什麼?!

mqttc = mosquitto.Mosquitto() 
mqttc.on_message = on_message 
mqttc.on_connect = on_connect 
mqttc.on_disconnect = on_disconnect 
mqttc.on_publish = on_publish 
mqttc.on_subscribe = on_subscribe 

mqttc.reconnect_delay_set(120, 300, True) 

mqttc.connect("test.mosquitto.org", 1883, 60) 
mqttc.subscribe("/foo/bar", 0) 

回答

3

這需要更好的文檔,C庫有一些文檔,但Python模塊沒有。

你的語法是正確的:

def reconnect_delay_set(self, delay, delay_max, exponential_backoff): 
    ... 

delay是秒數連續重新連接嘗試之間等待。默認情況下,它設置爲1. delay_max是重新連接嘗試之間等待的最大秒數,默認情況下也設置爲1。這意味着默認行爲是嘗試每秒重新連接。

如果delay_max大於delay,則exponential_backoff發揮作用。默認情況下設置爲False,每次重新連接嘗試失敗時,使用的延遲增加delay,最大爲delay_max。所以如果delay=3delay_max=15,那麼你會得到延遲3,9,12,15,15,...換句話說delay*reconnect_failures。重新連接成功後,延遲被重置。

如果exponential_backoff爲真,那麼行爲應該是將延遲設置爲delay*reconnect_failures^2。在你的情況下,這會導致120,240,300,300,...

延遲看起來好像在exponential_backoff=True的情況下有一個額外的術語,所以你實際上最終得到延遲300,300,...。這將在即將發佈的1.2.2版本中得到修復。

+0

Thx。是找不到任何東西,所以我想在這裏問,所以如果其他人需要的信息,谷歌搜索會發現它。沒有想到chk的C庫。 –

+1

你去了哪裏:https://bitbucket.org/oojah/mosquitto/commits/ca11949b3bb5326cceb7ae2dd267336047b2fe74 – ralight