首页 > 解决方案 > 使用 mod_wsgi 托管的烧瓶应用程序作为外部进程发送到在 gunicorn 上运行的 Flask-SocketIO 服务器和 eventlet worker

问题描述

我在弹性豆茎上部署了一个烧瓶应用程序。这是一个 REST api,主要执行数据库 CRUD 操作,计算量不大。提供的默认配置是不支持 Flask-SocketIO 的 Apache+mod_wsgi。虽然我设法用 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 方式是否更适合?如果我在当前配置中遇到任何进一步的问题,我会转向它。

标签: python-3.xflaskmod-wsgiflask-socketio

解决方案


没有问题,但也有缺点。

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

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


推荐阅读