2017-06-29 228 views
0

我在Python2.7中使用paho-mqtt 1.2來收聽代理在訂閱特定主題後廣播的消息。paho-mqtt訂閱支票訂閱狀態

它初始化像

import paho.mqtt.client as mqtt #python mqtt package 

# initialize MQTT client 
mqttc = mqtt.Client() 

# register listener functions  
mqttc.on_connect = on_connect 
mqttc.on_subscribe = on_subscribe 
mqttc.on_message = on_message 

# connect to MQTT broker 
mqttc.connect(<IP>, <PORT>, <KEEPALIVE_INTERVAL>) 

# subscribe a topic to the broker 
subscr = mqttc.subscribe(<TOPIC_NAME>, 0) 

與自定義功能

def on_connect(client, userdata, flags, rc): 
    print "connected" 

def on_subscribe(client, userdata, mid, granted_qos): 
    print "subscribed" 

def on_message(client, userdata, msg): 
    print "message received" 

從API我可以閱讀有關認購()函數

該函數返回一個元組(結果, mid),結果爲 MQTT_ERR_SUCCESS表示成功或(MQTT_ERR_NO_CONN,無) 客戶端當前未連接。 mid是 訂閱請求的消息ID。通過檢查on_subscribe() 回調中的中間參數(如果已定義),可以使用中間值跟蹤訂閱 請求。

我現在試圖檢索有關訂閱的狀態,即如果我訂閱了VALID主題。在我的理解中,如果主題的格式無效,則subscribe()函數僅返回錯誤代碼。但是我想提取信息,如果我訂閱了實際播出的話題。

到目前爲止,無論我訂閱哪個主題(有效或無效),我都會收到一個包含訂閱ID的on_subscribe()調用。

回答

1

您可以隨時訂閱所有(語法正確)的主題,因爲可能會在將來的某個時間發佈消息。

在MQTT中,在使用它之前不需要聲明主題,代理將允許您訂閱消息從未(並且可能永遠不會)將消息發佈到的主題。

只有當消息發佈到該主題時,主題纔有效。

要知道哪些主題實際上正在使用的唯一方法是訂閱它們並查看是否有消息出現。

+0

所以這意味着如果我有一個話題,每天只發送一次消息,而且我的話題訂閱有一個錯字,我不會注意到這一天? – HeXor

+1

假設沒有持久訂閱的新客戶端和消息正在發佈而沒有設置保留標誌,那麼只有在發佈消息時纔會收到該消息 – hardillb

+0

由於我只配置了監聽者,而不是代理,所以我不知道'retain = True'選項,但是這肯定會給我一個處理這個問題的方法,謝謝! – HeXor