如何暂时断开与 MQTT 主题的连接
How to temporary disconnect from MQTT topics
我实现了与代理的连接,例如:
app.py
import paho.mqtt.client as mqtt
client = mqtt.Client(client_id='my_client', clean_session=False)
my_client = MyClient(client)
try:
my_client.start()
while True:
try:
client.loop()
except Exception as e:
my_client.start()
except Exception as e:
client.loop_stop()
exit(1)
MyClient.py
class MyClient:
def __init__(self, mqtt=None):
self.mqtt = mqtt
def start(self):
self.mqtt.subscribe('some/topic')
我有部分代码要暂停收听主题:
self.mqtt.unsubscribe('some/topic')
稍后我想重新订阅它 我想再次致电 start()
,例如:self.start()
但它再也没有订阅过。知道为什么吗?
在抛出异常后调用 start()
将不起作用,因为此时客户端很可能未连接。
您应该将您的订阅移至 on_connect
callback,然后它将始终在客户端(重新)连接后重新订阅
至于你原来的问题,可能最好只设置一个布尔标志并用它来控制消息的处理,而不是 unsubscribing/subscribing 当你想忽略消息时。
我实现了与代理的连接,例如:
app.py
import paho.mqtt.client as mqtt
client = mqtt.Client(client_id='my_client', clean_session=False)
my_client = MyClient(client)
try:
my_client.start()
while True:
try:
client.loop()
except Exception as e:
my_client.start()
except Exception as e:
client.loop_stop()
exit(1)
MyClient.py
class MyClient:
def __init__(self, mqtt=None):
self.mqtt = mqtt
def start(self):
self.mqtt.subscribe('some/topic')
我有部分代码要暂停收听主题:
self.mqtt.unsubscribe('some/topic')
稍后我想重新订阅它 我想再次致电 start()
,例如:self.start()
但它再也没有订阅过。知道为什么吗?
在抛出异常后调用 start()
将不起作用,因为此时客户端很可能未连接。
您应该将您的订阅移至 on_connect
callback,然后它将始终在客户端(重新)连接后重新订阅
至于你原来的问题,可能最好只设置一个布尔标志并用它来控制消息的处理,而不是 unsubscribing/subscribing 当你想忽略消息时。