mqtt paho网络循环不必要?

时间:2016-04-21 18:09:03

标签: networking mqtt paho

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

2 个答案:

答案 0 :(得分:0)

许多事情需要网络循环:

  1. 处理收到的消息
  2. 发送保持连接所需的ping数据包
  3. 处理高QOS所需的额外数据包
  4. 发送占用多个网络数据包的消息(例如,大于本地MTU)
  5. 只有在消息速率较低时(每个保持活动时间小于1 msg)才需要ping消息。

    鉴于你现在可以在一个单独的线程中在后台启动网络循环,我建议无论如何启动它

答案 1 :(得分:0)

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

然而,更重要的一点是,不可能保证调用publish()实际上将完成发送消息而不使用网络循环。它可能在某些时候有效,但可能无法在任何时间完成发送消息。

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

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

但这将要求网络循环正在一个单独的线程中处理,与loop_start()一样。