MQTT - 有没有办法检查客户端是否仍然连接
MQTT - Is there a way to check if the client is still connected
有没有办法检查客户端是否仍然连接到 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)
问题是我不在,所以我什至不知道为什么它停止了!只有当我重新启动我的代理时,它才会再次开始接收。
我在 doc 中看不到,但有 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)
您可以在 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
您可以使用 will
消息来执行此操作。
client=mqtt.Client()
client.will_set('will_message_topic',payload=time.time(),qos=2,retain=True)
client.connect(address,1883,60)
client.publish('will_message_topic',payload='I am alive',qos=2,retain=True)
client.loop_start()#this line is important
while 1:#faster than while True
you loop
通过留言will
,您可以使用另一个客户端来确定该客户端是否在线。
有没有办法检查客户端是否仍然连接到 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)
问题是我不在,所以我什至不知道为什么它停止了!只有当我重新启动我的代理时,它才会再次开始接收。
我在 doc 中看不到,但有 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)
您可以在 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
您可以使用 will
消息来执行此操作。
client=mqtt.Client()
client.will_set('will_message_topic',payload=time.time(),qos=2,retain=True)
client.connect(address,1883,60)
client.publish('will_message_topic',payload='I am alive',qos=2,retain=True)
client.loop_start()#this line is important
while 1:#faster than while True
you loop
通过留言will
,您可以使用另一个客户端来确定该客户端是否在线。