Flask-MQTT在uWSGI NGINX上运行时,在 "Socket error on client <unknown> "后断开连接。

问题描述 投票:0回答:1

我有一个设置,我使用 容器-MQTT 将我的python Flask API连接到Mosquitto broker。每当我在开发服务器上运行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 是不够的,它仍然会产生两个进程)

nginx flask mqtt uwsgi
1个回答
1
投票

99%的时候,一个"Socket error on client <unknown>"是一个认证错误。我不了解Flask,所以我不知道该从哪里指点你,但你的代码中要么是试图传递一个没有定义给Mosquitto的用户名密码,要么是试图用Mosquitto不喜欢的证书进行TLS连接。


0
投票

好吧,原来我可以在Flask-MQTT官方文档中读到,整个多进程从一开始就不会工作。它说就在那里的思考字母。

Flask -MQTT目前不适合与多个工作者实例一起使用。

所以我看了我的uwsgi app.ini 再仔细看看文件,其实答案很简单。原来我在里面有一个喜欢 master = true......在我删除后,它的工作像一个魅力。

© www.soinside.com 2019 - 2024. All rights reserved.