使用asyncio_mqtt大批量创建连接时候(大概200个),连接总是会失败,中间加1s延时创建连接,就不会出现连接丢失,怎么回事?

python + asyncio_mqtt

EMQ 5.0

批量创建连接(200个)

场景一:
循环创建连接,并且创建成功后开始每间隔2S发布一次消息,没有延时,只能成功部分。

场景二:
在每次创建连接的中间添加1秒延时,就不会出现连接丢失的情况,并且所有的连接消息手法正常。

得看下原因,从报错信息上进行分析

感谢回复!

找到原因了,是我自己代码的原因,在高并发时候或者快速循环创建连接时候,client_id字段值采用的是10位时间戳的形式。

太快的原因导致有些client_id重复,publish结束后会执行disconnect操作,使用相同client_id的其它连接就会被断开,无法继续publish。

现改用uuid的格式,经过大批量连接测试,问题未再复现。

灵感来自于:To narrow calls get a "asyncio_mqtt.error.MqttCodeError: [code:4] The client is not currently connected." · Issue #171 · sbtinstruments/aiomqtt · GitHub