MQTT PAHO 网络环路是不必要的



我见过许多paho客户端读取传感器数据然后发布的例子,例如 https://github.com/jamesmoulding/motion-sensor/blob/master/open.py。我所见过的都没有像 https://eclipse.org/paho/clients/python/docs/#network-loop 中建议的那样启动网络循环。我想知道网络循环是否不需要发布?也许只有在我订阅某些东西时才需要?

为了扩展@hardillb所说的内容,他的第 2 点"发送保持连接活动所需的 ping 数据包"只有在您发布的速率不足以匹配您在连接时设置的保持连接时,才是绝对必要的。换句话说,客户端完全有可能永远不需要发送PINGREQ,因此永远不需要接收PINGRESP。

但是,更重要的一点是,在不使用网络环路的情况下,无法保证调用publish()将实际完成发送消息。它在某些时候可能会起作用,但可能无法随时完成发送消息。

下一版本的客户端将允许您执行以下操作:

m = mqttc.publish("class", "bar", qos=2)
m.wait_for_publish()

但这需要网络循环在单独的线程中处理,就像 loop_start() 一样。

网络环路是许多事情所必需的:

  1. 处理传入邮件
  2. 发送保持连接活动所需的 ping 数据包
  3. 处理高 QOS 所需的额外数据包
  4. 发送占用多个网络数据包(例如大于本地 MTU)的消息

仅当消息速率较低(每个保持活动状态期间少于 1 条消息)时,才需要 ping 消息。

鉴于这些天您可以在单独的线程上在后台启动网络循环,我建议无论如何启动它

最新更新