MQTT Paho Python可靠的重新连接

时间:2016-04-05 14:42:52

标签: python mqtt

我正在尝试让我的MQTT Paho Python脚本保持连接(并在断开连接时重新连接)。可悲的是,我不知道该怎么做。

也就是说,机器是通过WiFi连接的,所以在信号丢失或USB加密狗被淘汰的情况下,我不希望代码在我身上烧掉,所以我试图涵盖所有异常/错误。

这是我正在尝试使用的代码的一大块:

mqttc = mqtt.Client(machine_id, clean_session=False)
mqttc.username_pw_set(machine_id, mqtt_pwd)
mqttc.connect(mqtt_host, mqtt_port)
mqttc.subscribe(machine_id, qos=1)

def on_disconnect(client, userdata, rc):
        if rc != 0:
                print "Unexpected MQTT disconnection. Attempting to reconnect."
                try:
                        mqttc.reconnect()
                except socket.error:
                            ??????
mqttc.on_connect = on_connect
mqttc.on_message = on_message
mqttc.on_disconnect = on_disconnect
mqttc.loop_forever()

我无法进一步深入,因为我不知道如何让它再次连接?除非它能够第一次重新连接,否则我似乎无法获得正确的重新连接循环。

任何建议都会非常有用!

谢谢!

1 个答案:

答案 0 :(得分:3)

阅读源{1),loop_forver()方法,在无限阻塞循环中调用loop()方法。它是loop()方法,可确保使用代理维护发布/订阅消息和mqtt keepalive流量。如果连接断开,loop_forver()也会自动重新连接。

另请注意loop_forever()阻止,直到客户端明确调用disconnect()。因此,如果您只想在程序中运行MQTT客户端,那将非常有用。我更喜欢loop_start() / loop_stop()方法。

mqttc = mqtt.Client(machine_id, clean_session=False)
mqttc.username_pw_set(mqtt_user, mqtt_pwd)
mqttc.connect(mqtt_host, mqtt_port)
mqttc.subscribe(mqtt_topic, qos=1)

def on_disconnect(client, userdata, rc):
    if rc != 0:
        print "Unexpected MQTT disconnection. Will auto-reconnect"

mqttc.on_connect = on_connect
mqttc.on_message = on_message
mqttc.on_disconnect = on_disconnect
mqttc.loop_forever()

不确定您在machine_idusername_pw_set()来电中使用subscribe()的原因。改变了它们。