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が よりも大きい場合はdelayexponential_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、...の遅延を与えます

for の場合に余分な用語があるようにexponential_backoff=True見えるため、実際には 300、300 の遅延が発生します。これは、次の 1.2.2 リリースで修正される予定です。

于 2013-10-16T13:53:56.570 に答える