Python paho mqtt延迟了连接状态



此代码片段:

import paho.mqtt.client as mqtt
client = mqtt.Client()
client.connect('localhost')
print(client.is_connected())
while not client.is_connected():
client.loop()
print(client.is_connected())
print(client.is_connected())
client.disconnect()

生产:

False
False
True
True

其指示在从CCD_ 1返回时连接状态尚未更新。文件(https://pypi.org/project/paho-mqtt/#connect-connect()函数将客户端连接到代理。这是一个阻塞函数这表明从connect()返回时的状态应该是准确的。我是不是错过了什么?是否有其他方法可以测试client是否已连接?

连接到代理是一个分两个阶段的过程:

  • 建立连接(TCP/TLS/Websocket等)
  • 执行MQTT连接握手(CONNECT/CONNACK)

查看来源,当您调用client.connect('localhost')时,第一步(建立网络连接)似乎在函数返回之前完成,但第二步没有完成(发送了CONNECT数据包,但函数没有等待CONNACK)。

连接状态(如client.is_connected()所报告的)仅在处理了connect()0数据包时更新(这在loop中完成)。

文档没有尽可能好地涵盖这一点(已经提出了一些问题,例如这个和这个编辑-我创建了一个PR来更新文档)。

是否有其他方法可以测试客户端是否已连接?

更好的方法是使用on_connect回调(如示例所示)。此答案提供了更多信息。

最新更新