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

时间:2019-02-12 07:39:45

标签: python-3.x flask mod-wsgi flask-socketio

我在弹性beantalk上部署了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,并运行一个共享相同Redis消息队列的flask-socketio服务器,我能够从mod_wsgi实例中发出数据,并且看起来运行良好。

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

1 个答案:

答案 0 :(得分:0)

没有问题,但是有缺点。

外部进程无法接收事件,也无法接收其发出的事件的回调。因此,请确保这不会成为将来的限制。

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