0

使用python、mosquitto(mqtt)库,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)
4

1 回答 1

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 版本中得到修复。

于 2013-10-16T13:53:56.570 回答