簡體   English   中英

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)

問題是我不在,所以我什至不知道它為什么停止了! 只有當我重新啟動代理時,它才會再次開始接收。

您可以在 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

我在文檔中看不到,但有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)

您可以使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM