如果使用umqtt默认的cleansession,即断线后将清除会话状态并取消所有订阅,那么该客户端将无法接收离线消息。在这种情况下,如果想要接收离线消息,则需要在重新建立连接时手动设置cleansession为False。例如:
```python
import umqtt.simple as mqtt
client = mqtt.MQTTClient("client_id", "broker_address", keepalive=60)
def sub_callback(topic, msg):
# 处理订阅到的消息
pass
client.set_callback(sub_callback)
client.connect(clean_session=False) # 连接并设置cleansession为False
client.subscribe("my_topic") # 订阅主题
while True:
client.wait_msg()
```
这样,即使客户端在重新连接后,还是可以接收到离线期间别人发布的消息。
另一方面,如果使用umqtt的同步版本(如umqtt.robust),则无需手动设置cleansession为False,因为在异常掉线后,客户端会自动重连并恢复之前的会话状态,包括订阅和未接收的消息。
如果使用umqtt默认的cleansession,即断线后将清除会话状态并取消所有订阅,那么该客户端将无法接收离线消息。在这种情况下,如果想要接收离线消息,则需要在重新建立连接时手动设置cleansession为False。例如:
```python
import umqtt.simple as mqtt
client = mqtt.MQTTClient("client_id", "broker_address", keepalive=60)
def sub_callback(topic, msg):
# 处理订阅到的消息
pass
client.set_callback(sub_callback)
client.connect(clean_session=False) # 连接并设置cleansession为False
client.subscribe("my_topic") # 订阅主题
while True:
client.wait_msg()
```
这样,即使客户端在重新连接后,还是可以接收到离线期间别人发布的消息。
另一方面,如果使用umqtt的同步版本(如umqtt.robust),则无需手动设置cleansession为False,因为在异常掉线后,客户端会自动重连并恢复之前的会话状态,包括订阅和未接收的消息。
举报