【问题标题】:What is the correct syntax for mqtt reconnect?mqtt 重新连接的正确语法是什么?
【发布时间】:2013-10-16 11:53:04
【问题描述】:

使用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)

【问题讨论】:

    标签: python mqtt


    【解决方案1】:

    这需要更好的文档,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 版本中得到修复。

    【讨论】:

    • 谢谢。是的,找不到任何东西,所以我想我会在这里问,所以如果其他人需要该信息,谷歌搜索会找到它。没想到要检查 C 库。
    猜你喜欢
    • 2015-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-13
    • 2023-01-03
    • 1970-01-01
    • 2013-04-25
    相关资源
    最近更新 更多