簡體   English   中英

在 paho_mqtt 中啟動 loop_forever() 后,我可以訂閱主題嗎?

[英]Can i subscribe to a topic after i started loop_forever() in paho_mqtt?

在執行 loop_forever() 函數之前,我是否需要訂閱我感興趣的所有主題? 例如,在 MQTT 客戶端的生命周期內以某種方式動態添加更多訂閱。

我發現這是可能的。 我實現了一個隱藏 mqtt 內容的類。 在構造函數中,我連接到代理並使用單獨的線程啟動 loop_forever()。 然后該類訂閱一些主題並為每個主題注冊一個回調,這些回調從 on_message 調用。

c = comm("localhost")
c.register_handler("topic1", first_handler)
c.register_handler("topic2", second_handler)

class comm:
    def __init__(self, broker_address):
        self.client = mqtt.Client("")
        self.client.on_message = self.on_message
        self.callbacks = dict()
        self.client.connect(broker_address)
        threading.Thread(target=self.__run, daemon=True).start()
        
    def __run(self):
        self.client.loop_forever()

    def on_message(self, client, userdata, msg):
        self.callbacks[msg.topic](jsonpickle.decode(msg.payload))

    def register_handler(self, topic: str, handler: Callable[[Dict], None]):
        self.callbacks[topic] = handler
        self.client.subscribe(topic)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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