mqtt重新连接的正确语法是什么?

时间:2013-10-16 11:53:04

标签: python mqtt

使用python,mosquitto(mqtt)库,编写mqtt reconnect命令的正确方法是什么?

我下面已经累了,但那不起作用......我错过了什么吗?!

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)

1 个答案:

答案 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为True,则行为应该是将延迟设置为delay*reconnect_failures^2。在你的情况下,这将延迟120,240,300,300,......

似乎exponential_backoff=True的情况下有一个额外的术语,所以你实际上最终会得到300,300的延迟......这将在即将发布的1.2.2版本中修复。