使用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)
答案 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=3
和delay_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版本中修复。