如何使用FlaskMQTT处理失败的连接

2024-10-03 04:32:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个FlaskMQTT客户机正在运行,如果可以访问代理,一切都很好。当MQTT代理不可访问时,问题开始出现。通常,我能够在on_connect函数上处理带有异常的失败连接,但是我不太了解如何使用Flask Mqtt实现它

我希望在允许web服务器运行网页的同时处理失败的代理连接

烧瓶MQTT的文档和示例:https://flask-mqtt.readthedocs.io/en/latest/usage.html

处理代理连接失败的代码(基于Steve的Internet指南)

def on_connect(client, userdata, flags, rc):
    if rc==0:
        client.connected_flag=True #set flag
        print("connected OK")
    else:
        print("Bad connection Returned code=",rc)
        client.bad_connection_flag=True

代理未连接时Flask应用程序上的错误:

C:\Users\USER\Documents\College\FYP1\flask_testing\venv\Scripts\python.exe C:/Users/USER/Documents/College/FYP1/flask_testing/main.py
Traceback (most recent call last):
  File "C:/Users/USER/Documents/College/FYP1/flask_testing/main.py", line 37, in <module>
    mqtt = Mqtt(app)
  File "C:\Users\USER\Documents\College\FYP1\flask_testing\venv\lib\site-packages\flask_mqtt\__init__.py", line 104, in __init__
    self.init_app(app)
  File "C:\Users\USER\Documents\College\FYP1\flask_testing\venv\lib\site-packages\flask_mqtt\__init__.py", line 183, in init_app
    self._connect()
  File "C:\Users\USER\Documents\College\FYP1\flask_testing\venv\lib\site-packages\flask_mqtt\__init__.py", line 209, in _connect
    res = self.client.connect(
  File "C:\Users\USER\Documents\College\FYP1\flask_testing\venv\lib\site-packages\paho\mqtt\client.py", line 941, in connect
    return self.reconnect()
  File "C:\Users\USER\Documents\College\FYP1\flask_testing\venv\lib\site-packages\paho\mqtt\client.py", line 1075, in reconnect
    sock = self._create_socket_connection()
  File "C:\Users\USER\Documents\College\FYP1\flask_testing\venv\lib\site-packages\paho\mqtt\client.py", line 3546, in _create_socket_connection
    return socket.create_connection(addr, source_address=source, timeout=self._keepalive)
  File "C:\Users\USER\AppData\Local\Programs\Python\Python38\lib\socket.py", line 807, in create_connection
    raise err
  File "C:\Users\USER\AppData\Local\Programs\Python\Python38\lib\socket.py", line 796, in create_connection
    sock.connect(sa)
socket.timeout: timed out


Tags: inpyclientflasklibconnectlinetesting