python - Mqtt 代理经常断开连接,即使它具有唯一的客户端 ID
问题描述
嗨,我有一个 mqtt 代理启动并运行。我正在使用 paho-mqtt 从 python 连接到它。代码
def on_connect(client, userdata, flags, rc):
if rc==0:
print("connected OK Returned code=",rc)
else:
print("Bad connection Returned code=",rc)
print("Subscribing to topic","data/#")
client.subscribe("data/#")
def on_disconnect(client, userdata, rc):
print("Client Got Disconnected")
if rc != 0:
print('Unexpected MQTT disconnection. Will auto-reconnect')
else:
print('rc value:' + str(rc))
broker_address="ip"
port = 'port'
print("creating new instance")
client = mqtt.Client(clean_session=True) #create new instance
client.on_connect = on_connect
client.on_message = on_message #attach function to callback
client.on_disconnect = on_disconnect
print("connecting to broker")
client.connect(broker_address, port=port,) #connect to broker
client.loop_forever() #stop the loop
我在多个脚本中使用相同的代码,连接到代理并订阅一个主题。当有 5-6 个脚本时,断开连接的频率较少。我有大约 12-13 个脚本连接到代理,并且断开连接的频率显着增加。脚本中的连接或其关于代理的连接是否有问题。有人可以帮我弄这个吗?
解决方案
我的猜测是您的代理不喜欢 Python 客户端默认为空 clientid 的事实。根据规范,它应该将此视为必须为您的客户分配唯一 ID 的指示,但它可能不正确地实施规范?
请尝试在您的 connect() 中传递一个随机生成/唯一的客户端 ID,因为这将保证您的客户端都是唯一的,而不是所有客户端都具有相同的 ID,这对于您的代理来说意味着当一个新客户端与相同的 ID 尝试连接。
推荐阅读
- python - Pandas 无法正常工作,即使我安装了它
- python - PHP exec不执行exe文件
- reactjs - 如何在没有组件安装的情况下在具有 setState 的函数内部调用函数?
- assembly - 在 Hack 汇编代码中初始化一个数组
- google-apps-script - 如果存在重复的文件夹名称Google表单如何根据上传的文件自动重命名文件夹
- css - CSS display flex 防止 colspan 在动态显示/隐藏表格行时按预期工作
- php - 如何在我的时间码中修复这个非常令人沮丧的时间错误?
- python - 验证 tkinter 输入框中的数据。如果它的数字或字母或电子邮件
- java - 缺少用于 java 源选项卡的 Netbeans
- java - 当内存达到特定值时,Kubernetes会捕获内存转储?