MQTT - 有没有办法检查客户端是否仍然连接

新手上路,请多包涵

有没有办法检查客户端是否仍然连接到 MQTT 代理?

就像是

if client.isConnected(): # for example
    # if True then do stuff

编辑:有一个例子,我的 Raspberry Pi 停止接收来自客户端的信息,尽管它仍在运行(从外观上看,代码仍在显示更新的结果)。

这是代码,因为我可能做错了什么:

 client = mqtt.Client()
client.connect(address, 1883, 60)

while True:
    data = getdata()
    client.publish("$ahmed/",data,0)
    time.sleep(0.2)

问题是我不在,所以我什至不确定它为什么停下来!只有当我重新启动我的经纪人时,它才会再次开始接收。

原文由 Ahmed Al-haddad 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 927
2 个回答

您可以在 on_connect 中激活一个标志并在 on_disconnect 中停用它。通过这种方式,您可以知道客户端是否已连接。

 import paho.mqtt.client as mqtt

flag_connected = 0

def on_connect(client, userdata, flags, rc):
   global flag_connected
   flag_connected = 1

def on_disconnect(client, userdata, rc):
   global flag_connected
   flag_connected = 0

client = mqtt.Client()
client.on_connect = on_connect
client.on_disconnect = on_disconnect
client.connect(server,port)
client.loop_forever()
if flag_connected == 1:
   # Publish message
else:
   # Wait to reconnect

原文由 Alejandro D 发布,翻译遵循 CC BY-SA 4.0 许可协议

我在 文档 中看不到,但有 on_disconnect on_connect 回调可用于设置您自己的状态变量

编辑:

您需要调用 loop 函数之一来为客户端提供处理网络操作的周期:

 client = mqtt.Client()
client.connect(address, 1883, 60)

while True:
    data = getdata()
    client.publish("$ahmed/",data,0)
    client.loop(timeout=1.0, max_packets=1)
    time.sleep(0.2)

原文由 hardillb 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题