簡體   English   中英

如何使用 Flask-MQTT 處理失敗的連接

[英]How to handle failed connections with Flask-MQTT

我有一個 Flask-Mqtt 客戶端正在運行,如果可以訪問代理,一切都很好。 當 MQTT 代理不可訪問時,問題就開始了。 通常,我將能夠處理 on_connect function 上的異常連接失敗,但是我不太明白如何使用 Flask-Mqtt 實現它

我想處理失敗的代理連接,同時允許 web 服務器運行 web 頁面。

Flask-MQTT 的文檔和示例: https://flask-mqtt.readthedocs.io/en/latest/usage.html

處理代理連接失敗的代碼(基於史蒂夫的互聯網指南)

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

我遇到了類似的錯誤。 當 mqtt 服務器運行時一切正常,但如果我在服務器關閉的情況下啟動應用程序,應用程序將失敗,並顯示與您相同的消息。

我終於在創建 MQTT object 實例時使用 connect_async 參數解決了這個問題。

mqtt_client = Mqtt(app, connect_async=True)

使用該參數,將顯示 web 頁面,並且當 mqtt 服務器可用時,它將自動連接。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM