我有一个设置,我使用 容器-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
是不够的,它仍然会产生两个进程)
99%的时候,一个"Socket error on client <unknown>
"是一个认证错误。我不了解Flask,所以我不知道该从哪里指点你,但你的代码中要么是试图传递一个没有定义给Mosquitto的用户名密码,要么是试图用Mosquitto不喜欢的证书进行TLS连接。
好吧,原来我可以在Flask-MQTT官方文档中读到,整个多进程从一开始就不会工作。它说就在那里的思考字母。
Flask -MQTT目前不适合与多个工作者实例一起使用。
所以我看了我的uwsgi app.ini
再仔细看看文件,其实答案很简单。原来我在里面有一个喜欢 master = true
......在我删除后,它的工作像一个魅力。