![](/img/trans.png)
[英]Check if a Client is Still Connected - Python Socket Programming using UDP
[英]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)
問題是我不在,所以我什至不知道它為什么停止了! 只有當我重新啟動代理時,它才會再次開始接收。
您可以在 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
消息,您可以使用另一個客戶端來確定該客戶端是否在線。
這是可用的 API。 您只需使用 client.is_connected() 返回 True 或 False。
不知道是否還有人想要回答這個,我知道我做了,因此環顧四周,發現mqtt paho有這樣的功能來檢查客戶端是否仍然連接到代理。
它是這樣的:
MqttClient client = new MqttClient("tcp://broker.mqttdashboard.com:1883", //URI
MqttClient.generateClientId(), //ClientId
new MemoryPersistence()); //Persistence
client.connect();
client.isConnected();
干杯!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.