我正在使用paho-mqtt编写python客户端,我使用publish()使用已建立的连接发布数据。
mqttc = mqtt.Client()
...
while True:
...
rc = mqttc.publish(topic, data)
但是服务器会把我抽出去。但是,在我再次调用发布之前,我没有得到超时。
我按照以下顺序获得了rc:
(0, 1)
delay
(0, 2)
[Errno 32] Broken pipe
(1, 3)
使用Wireshark,我看到当我第二次发布时,连接被重置。但是在我第三次发布之前,我没有得到“破管”。我尝试提供on_disconnect回调,它也只在第3次发布后调用。
调用发布的正确方法是什么,并通知发布已立即失败?此外,“Broken pipe”消息似乎不是例外。如何防止打印?
答案 0 :(得分:3)
正如@ jan-vlcinsky暗示的那样,你需要包含一个调用,要么在后台启动客户端网络循环,要么在前台运行循环。
E.g。
mqttc = mqtt.Client()
mqttc.loop_start()
...
while True:
...
rc = mqttc.publish(topic, data)
或者
mqttc = mqtt.Client()
...
while True:
...
rc = mqttc.publish(topic, data)
mqttc.loop()