在 gunicorn 上使用 mod_wsgi 托管的 Flask 应用程序作为外部进程发送到带有 eventlet worker 的 Flask-SocketIO 服务器 运行

Using mod_wsgi hosted flask app to emit as an external process to a Flask-SocketIO server running on gunicorn with eventlet worker

我在 Elastic Beanstalk 上部署了一个 Flask 应用程序。它是一个 REST api,主要执行数据库 CRUD 操作并且没有太多繁重的计算。提供的默认配置是 Apache+mod_wsgi,它不支持 Flask-SocketIO。尽管我设法用 nginx+gunicorn+eventlet 设置替换它。它运行良好,但有时我会遇到一些部署问题。

使用默认的 mod_wsgi 设置并使用它来发送数据,如此处所述 https://flask-socketio.readthedocs.io/en/latest/#emitting-from-an-external-process 和 运行 一个 flask-socketio 服务器共享相同的 Redis 消息队列,我能够从 mod_wsgi 实例发出数据并且它似乎运行良好。

任何人都可以告诉我这种配置的 Flask-SocketIO 是否有任何问题,或者 gunicorn+nginx 方式是否更适合?如果当前配置遇到任何其他问题,我会转向它。

没有问题,但有缺点。

外部进程无法接收事件,也无法接收它们发出的事件的回调。所以请确保这不会成为未来的限制。

您的另一个选择是将 mod_wsgi 服务器作为 Socket.IO 客户端而不是外部进程连接到 Flask-SocketIO 服务器。如果您作为客户端连接,则不需要使用 Redis 队列,连接是通过长轮询 and/or WebSocket 完成的。