Flask 套接字 - 无效会话 lWmxdNRmai59bRfLAAAA(此错误的进一步出现将使用级别 INFO 进行记录)

Sho*_*gar 1 flask gunicorn amazon-elb gevent-socketio flask-socketio

我正在尝试通过基本命令在 docker 中使用flask socket.io。

当我运行gunicorn的单个工作人员时,一切工作正常,但是当我增加工作人员时,然后在客户端,它开始给出400错误请求,并且在服务器日志上,我看到无效的会话lWmxdNRmai59bRfLAAAA(此错误的进一步发生将记录为级别信息)

这些是我正在使用的命令 Gunicorn --worker-class geventwebsocket.gunicorn.workers.GeventWebSocketWorker -w 2 application:app -b 0.0.0.0:5000

application.py文件是

from gevent import monkey monkey.patch_all()
from flask import Flask from flask_socketio import SocketIO from flask import session 
app = Flask(__name__) 
app.config.from_object("settings.BaseConfig") 
socket_app = SocketIO(
    app,
    cors_allowed_origins="*",
    message_queue=settings.get_evn("CACHE_QUEUE_URL"),
    async_mode="gevent", 
)
socket_app.init_app(app, cors_allowed_origins="*")
Run Code Online (Sandbox Code Playgroud)

我正在使用 Redis 作为消息队列,并已验证消息队列 url 是否正确

使用aws负载均衡器来处理请求

Mig*_*uel 6

不支持多个 Gunicorn Worker,因为 Gunicorn 负载平衡算法与 Socket.IO 要求不兼容。

文档中:

由于gunicorn使用的负载平衡算法有限,因此在使用该Web服务器时不可能使用多个工作进程。因此,上面的所有示例都包含 -w 1 选项。

在 Gunicorn 中使用多个工作进程的解决方法是启动多个单工作实例,并将它们放在功能更强大的负载均衡器(例如 nginx)后面。