![](/img/trans.png)
[英]How to get data from a flask-mqtt callback into a continuous flask text/event-stream response?
[英]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.