【问题标题】:Mqtt broker is disconnecting frequently even though it has a unique client idMqtt 代理经常断开连接,即使它具有唯一的客户端 ID
【发布时间】:2019-11-03 16:23:11
【问题描述】:

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

【问题讨论】:

  • 我们无法回答这个问题,您正在从on_disconnect 回调中丢弃任何有用的信息,并且您没有从代理处提供任何关于连接中断原因的信息。跨度>

标签: python mqtt paho broker


【解决方案1】:

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

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

【讨论】:

  • 嗨,谢谢!!这可能是一个原因。让我看看代理如何分配唯一的客户 ID。
  • 即使尝试使用唯一的客户端 ID 也无法解决问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多