互联网断开连接的 Paho mqtt 未运行回调

时间:2021-01-06 12:14:25

标签: python mqtt paho

我有这个 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 并在运行代码后,如果网络没有任何反应。我想要一些回调在互联网连接丢失时运行。我们有吗?

1 个答案:

答案 0 :(得分:2)

on_disconnect 是正确的回调 - 问题是它何时被调用?

如果网络连接丢失,您的客户端只会在下次尝试传输时注意到它。因此,如果客户端不准备发布某些内容(或确认在连接断开之前收到的订阅),则下一次传输将是 PINGREQ

默认情况下,keepalive 设置为 60 - 这意味着如果在此时间间隔内没有发送其他控制包,您的客户端将每 60 秒发送一次 PINGREQ

所以 on_disconnect 回调将被调用,它只是没有你预期的那么快发生。尝试降低 keepalive 以改善这一点