我在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()調用。
所以這意味着如果我有一個話題,每天只發送一次消息,而且我的話題訂閱有一個錯字,我不會注意到這一天? – HeXor
假設沒有持久訂閱的新客戶端和消息正在發佈而沒有設置保留標誌,那麼只有在發佈消息時纔會收到該消息 – hardillb
由於我只配置了監聽者,而不是代理,所以我不知道'retain = True'選項,但是這肯定會給我一個處理這個問題的方法,謝謝! – HeXor