我想编写一个同步程序,其中云将 mqtt 消息发送到设备,然后使用简单的等待响应来判断是否成功。 但它需要超时,例如 5 秒,应用程序认为它失败了。mqtt 简单 API 的 keepalive 参数似乎失去了效力,但大概率是我使用或理解了错误。
如果你们能给我一些建议,我将不胜感激
print("----before simple")
msg = subscribe.simple("paho/test/simple", hostname="39.100.79.76",port=1883,keepalive=5,will = {'topic': "paho/test/disconnect", 'payload':"network or device anomaly", 'qos':2, 'retain':0})
print("----after simple")
然后运行它,简单的API无法结束
----before simple
infinite...
正确判断同步边缘云应用是否成功
您已经错过了 MQTT 客户端的 keepalive
属性的用途。
代理使用该keepalive
来检查客户端是否仍在运行。它通过保留自上次从客户端接收 MQTT 数据包以来的计时器来实现这一点。如果当计时器达到keepalive
时间时它没有收到数据包,它会向客户端发送 MQTT Ping 请求。如果它在一半的keepalive
时间内没有收到对该数据包的响应,那么它将断开客户端的连接并发布客户端可能已设置的任何最后遗嘱和遗嘱消息。
Paho 客户端库在后台处理 MQTT Ping 消息,无需用户参与。
您提供的代码示例将无限期等待响应。