python - 互联网断开连接上的 Paho mqtt 未运行回调
问题描述
我有这个 mqtt 类
class MQTT():
def __init__(self):
# Observer.__init__(self) # DON'T FORGET THIS
self.mqttClient = paho.Client(client_id=constants.MQTT_CLIENT_ID)
self.mqttClient.username_pw_set(username=constants.MQTT_BROKER_USERNAME, password=constants.MQTT_BROKER_PASSWORD)
# assign mqtt event callbacks
self.mqttClient.on_message = self.on_message
self.mqttClient.on_connect = self.on_connect
self.mqttClient.on_disconnect = self.on_disconnect
self.mqttClient.on_socket_close = self.on_disconnect
self.mqttClient.on_log = self.on_log
def on_disconnect(self,client, userdata, rc):
log("MQTT DISCONNECT:",client, userdata, rc)
进而
mqtt = MQTT()
如果我运行我的代码,它可以完美运行,但是当互联网连接丢失时,我必须运行一些功能。因此,我正在使用on_disconnect
并且在运行代码之后如果网络没有任何反应。我希望一些回叫在 Internet 连接丢失时运行。我们有吗?
解决方案
on_disconnect
是正确的回调 - 问题是它何时被调用?
如果网络连接丢失,您的客户端只会在下一次尝试传输时注意到它。因此,如果客户端不打算发布某些内容(或确认在连接断开之前收到的订阅),下一个传输将是PINGREQ
默认keepalive
设置为- 这意味着如果在此时间间隔内没有发送其他控制包60
,您的客户端将每 60 秒发送一次。PINGREQ
所以on_disconnect
回调将被调用,它只是没有像你预期的那么快发生。尝试降低keepalive
以改善这一点
推荐阅读
- javascript - 以自定义方式显示输入字段
- java - 如何使用 Java 生成高质量的 WAVE 文件
- docker - Dockerfile:如何在容器路径中挂载主机目录?
- java - 3 个支票账户 2 个没有透支但不想要透支的 cust 的构造函数得到一个
- python - python - 如何使用pandas在python中创建数据框?如果是这样的话?
- android - android customView 大小无法正常工作
- node.js - 如何使用节点js检查mongodb中是否存在集合?
- java - 使用 src/main 和 src/test 运行测试时出现问题
- java - 我怎样才能从firebase数据库中只带一个数据?
- node.js - Rockset -- 找不到模块“./rest/index”的模块声明。../../rest/index.js 已隐式键入任何