Flask-MQTT 在 uWSGI NGINX 上 'Socket error on client <unknown>' 而 运行 之后断开连接
Flask-MQTT disconnects after 'Socket error on client <unknown>' while running on uWSGI NGINX
我有一个设置,我使用 Flask-MQTT 将我的 python Flask API 连接到 Mosquitto 代理。每当我 运行 Flask API 和开发服务器时,一切都很好。但是每当我将其启动用于生产(使用 wsgi+nginx)时,就会建立与 Mosquitto 的连接,但每次我尝试发布内容时都会出现以下错误:
Socket error on client <unknown>, disconnecting.
我的 app.ini 将进程配置为 1 (processes = 1
)
我的 mosquitto.config 将 allow_anonymous 标志设置为 trye (allow_anonymous true
)
我似乎无法弄清楚我在这里做错了什么...
更新:
所以我认为正在发生的事情是 Flask-uwsgi 应用程序不止一次尝试连接到 mosquitto。有一个主进程在初始化时与 Mosquitto 连接。然后,每当在 Flask 应用程序上给出输入时,都会使用第二个进程。我不确定,但我认为 Mosquitto 当时只想要一个连接,因此在第二个连接上出错。所以现在我要么需要:
A) 以接受来自同一设备的多个连接的方式配置 Mosquitto
B) 以仅使用一个进程的方式配置 Flask(配置 processes = 1
是不够的,它仍会产生两个进程)
99% 的时间,“Socket error on client <unknown>
”是身份验证错误。我不了解 Flask,所以我不知道该将您指向何处,但是您的代码中的某些内容要么试图传递未定义给 Mosquitto 的 username/password,要么尝试与一个 TLS 连接证明 Mosquitto 不喜欢。
好吧,原来我可以在官方 Flask-MQTT 文档中读到整个多个进程从一开始就无法工作。它就在思考字母中说:
Flask-MQTT is currently not suitable for the use with multiple worker
instances.
所以我再次仔细查看了我的 uwsgi app.ini
文件,实际上答案很简单。我发现我在那里有一个喜欢 master = true
.. 在我删除它之后它就像一个魅力。
我有一个设置,我使用 Flask-MQTT 将我的 python Flask API 连接到 Mosquitto 代理。每当我 运行 Flask API 和开发服务器时,一切都很好。但是每当我将其启动用于生产(使用 wsgi+nginx)时,就会建立与 Mosquitto 的连接,但每次我尝试发布内容时都会出现以下错误:
Socket error on client <unknown>, disconnecting.
我的 app.ini 将进程配置为 1 (processes = 1
)
我的 mosquitto.config 将 allow_anonymous 标志设置为 trye (allow_anonymous true
)
我似乎无法弄清楚我在这里做错了什么...
更新: 所以我认为正在发生的事情是 Flask-uwsgi 应用程序不止一次尝试连接到 mosquitto。有一个主进程在初始化时与 Mosquitto 连接。然后,每当在 Flask 应用程序上给出输入时,都会使用第二个进程。我不确定,但我认为 Mosquitto 当时只想要一个连接,因此在第二个连接上出错。所以现在我要么需要:
A) 以接受来自同一设备的多个连接的方式配置 Mosquitto
B) 以仅使用一个进程的方式配置 Flask(配置 processes = 1
是不够的,它仍会产生两个进程)
99% 的时间,“Socket error on client <unknown>
”是身份验证错误。我不了解 Flask,所以我不知道该将您指向何处,但是您的代码中的某些内容要么试图传递未定义给 Mosquitto 的 username/password,要么尝试与一个 TLS 连接证明 Mosquitto 不喜欢。
好吧,原来我可以在官方 Flask-MQTT 文档中读到整个多个进程从一开始就无法工作。它就在思考字母中说:
Flask-MQTT is currently not suitable for the use with multiple worker instances.
所以我再次仔细查看了我的 uwsgi app.ini
文件,实际上答案很简单。我发现我在那里有一个喜欢 master = true
.. 在我删除它之后它就像一个魅力。