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

Ahm*_*dad 7 python mqtt

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

就像是

if client.isConnected(): # for example
    # if True then do stuff
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

事实是我不在,所以我什至不确定为什么停下来!只有重新启动代理后,代理才会重新开始接收。

小智 7

您可以在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
Run Code Online (Sandbox Code Playgroud)

  • 顺便说一句,`loop_forever()` 是一个阻塞调用。我们永远不会到达 `if flag_connected == 1:` 行。调用 `loop()` 会起作用吗? (2认同)
  • loop_start()是一个选项,用于启动一个调用loop_forever()的线程,或者您可以执行while循环来调用loop()。 (2认同)