首页 > 解决方案 > 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 个脚本连接到代理,并且断开连接的频率显着增加。脚本中的连接或其关于代理的连接是否有问题。有人可以帮我弄这个吗?

标签: pythonmqttpahobroker

解决方案


我的猜测是您的代理不喜欢 Python 客户端默认为空 clientid 的事实。根据规范,它应该将此视为必须为您的客户分配唯一 ID 的指示,但它可能不正确地实施规范?

请尝试在您的 connect() 中传递一个随机生成/唯一的客户端 ID,因为这将保证您的客户端都是唯一的,而不是所有客户端都具有相同的 ID,这对于您的代理来说意味着当一个新客户端与相同的 ID 尝试连接。


推荐阅读