Flask-SocketIO的首选生产设置是什么?对Gunicorn感到困惑,因为它只能由一个工人生成

问题描述

documentation的“部署”部分中,Gunicorn只能与Flask-SocketIO一起使用1个工作进程。我想知道部署flask-socket-io服务器的首选方法是什么?目前,我有一个常规的Flask应用程序,该应用程序使用从Nginx代理传递到的多工作者gunicorn服务器。尽管我没有任何负载平衡,但我希望并发性可以由多位gunicorn工作者来处理,而对于websockets服务器,这并不会给我带来什么麻烦。

也许我误解了eventlets / greenlets功能方式,但是我将uwsgi视为我尚未探索的唯一其他选择。为此值得进入uwsgi的学习曲线吗?

解决方法

Gunicorn和uWSGI都具有非常有限的负载均衡器,不支持所需的粘性会话。

如果要在这两个框架中使用多个工作服务器,则需要在其各自的端口上启动多个单工作服务器,然后在前面使用nginx作为负载平衡器。

除了nginx之外,您还需要添加一个消息队列(RabbitMQ,Redis等),所有这些过程都可以用来协调工作。

在此处查看有关部署多个服务器的文档:https://flask-socketio.readthedocs.io/en/latest/#using-multiple-workers