我正在尝试使我的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()
我无法获得进一步的进展,因为我不知道如何才能使其再次连接?除非它能够第一次重新连接,否则我似乎无法获得正确的重新连接循环。
任何建议都会非常有帮助!
谢谢!
读取source(1)(即loop_forver()
方法)会loop()
在无限阻塞循环中调用method。这是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_id
在username_pw_set()
和中使用subscribe()
。改变了他们。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句