Python 3.x 如何在断开网络重新连接后加快mqtt订阅消息的恢复
我有一个python项目代码,需要服务器向设备发送mqtt消息,它需要解决设备和云服务器应用程序操作和信息同步的问题。我找到了s Client函数有一个参数Python 3.x 如何在断开网络重新连接后加快mqtt订阅消息的恢复,python-3.x,mqtt,iot,paho,Python 3.x,Mqtt,Iot,Paho,我有一个python项目代码,需要服务器向设备发送mqtt消息,它需要解决设备和云服务器应用程序操作和信息同步的问题。我找到了s Client函数有一个参数Client(Client_id=”“,clean_session=True),用于恢复未连接的订阅以接收脱机期间发送的消息。但我在实验中发现,断开连接的时间越长,恢复所需的时间就越长,发送的消息也就越慢 如果你们能给我一些建议,加快恢复速度,或者提供有关云设备应用程序操作和信息同步的相关参考资料,我将不胜感激 我有笔试 云彩 装置 def
Client(Client_id=”“,clean_session=True)
,用于恢复未连接的订阅以接收脱机期间发送的消息。但我在实验中发现,断开连接的时间越长,恢复所需的时间就越长,发送的消息也就越慢
如果你们能给我一些建议,加快恢复速度,或者提供有关云设备应用程序操作和信息同步的相关参考资料,我将不胜感激
我有笔试
云彩
装置
def on_message(client, userdata, msg):
info = msg.payload.decode('utf-8')
print("##################info=",info)
def wait_to_handle("Device/#", mqtt_host, mqtt_port):
client = mqtt.Client(client_id="wait_to_handle", clean_session=False)
client.on_connect = on_connect
client.on_message = on_message
client.connect(mqtt_host,mqtt_port,60)
client.subscribe(topic=topics,qos=2)
client.loop_forever()
def send_data_func():
client = mqtt.Client('SendToCloud',clean_session=False)
client.on_publish = on_publish
client.connect(MQTT_IP, MQTT_PORT , 60)
client.loop_start()
count = 0
while 1:
print(count)
client.publish('Cloud/count',str(count),2)
count += 1
time.sleep(2)
设备结果
...
much Device sent message
...
Device sent message
Device sent message
Device sent message
Device sent message
Device sent message
Device sent message
18666
18667
18668
wait handle : Connected with result code 0
##################info= create
##################info= delete
##################info= modify
##################info= create
##################info= delete
##################info= modify
##################info= create
##################info= delete
##################info= modify
##################info= create
##################info= delete
##################info= modify
18669
18670
18671
18672
18673
18674
Device sent message
Device sent message
Device sent message
Device sent message
...
...
正如您所注意到的,通过禁用
clean_session
标志来使用持久会话,可以维护所有活动订阅,这样客户端就不需要重新订阅,并且在客户端临时断开连接并重新连接时,可以对消息(仅QoS 1或QoS 2)进行排队
代理将按配置的数量排队,可能有数千条消息——因此,恢复时间与断开连接的时间成正比
你的选择是:
- 将
标志设置为clean_session
,这将禁用所有错过消息的排队,但也要求您重新订阅感兴趣的主题true
- 保持
标记为clean_session
以维护订阅,但主题的发布者必须以QoS为0的方式发布以绕过排队false
- 此外,发布者可以在发布的消息上将
标志设置为retained
,这将使代理保留该主题的最新消息,并在重新连接时将其发送给客户端true
- 此外,发布者可以在发布的消息上将
- 将
标志设置为clean_session
,但确保制作人在发布时将true
标志设置为retained
,这将使代理保留该主题的最新消息,并在重新连接时将其发送给客户端,但将支持任何QoStrue
- 配置代理以将较少的丢失消息排队
...
much Device sent message
...
Device sent message
Device sent message
Device sent message
Device sent message
Device sent message
Device sent message
18666
18667
18668
wait handle : Connected with result code 0
##################info= create
##################info= delete
##################info= modify
##################info= create
##################info= delete
##################info= modify
##################info= create
##################info= delete
##################info= modify
##################info= create
##################info= delete
##################info= modify
18669
18670
18671
18672
18673
18674
Device sent message
Device sent message
Device sent message
Device sent message
...
...