我见过很多paho客户端读取传感器数据然后发布的例子,例如https://github.com/jamesmoulding/motion-sensor/blob/master/open.py。我所看到的没有按https://eclipse.org/paho/clients/python/docs/#network-loop中的建议启动网络循环。我想知道网络循环是否不需要发布?也许只有我订阅的东西才需要?
答案 0 :(得分:0)
许多事情需要网络循环:
只有在消息速率较低时(每个保持活动时间小于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()
一样。