使用 gevent 在 Gunicorn 中时,flask-socketio 可以处理多少个 websocket 客户端?

问题描述 投票:0回答:1

我正在考虑以下设置:

如果你真的很好奇,这里是源头将它们联系在一起。

这似乎可行,并且能够为 flask 应用程序和 socketio 应用程序提供 websockets 的正常 HTTP 流量。我的问题是:如何?它的可扩展性如何(特别是关于 websocket 部分)?

我对 WSGI 的理解是,每个进来的请求(http 或 websocket)都会阻塞一个 worker,直到连接终止。这意味着此设置一次只能处理一个 websocket 连接。我已经做了足够多的实验,不认为是这种情况,但我仍然不知道它是如何工作的。网络套接字是否在 Gunicorn 之外处理?如果是这样,为什么你必须给 Gunicorn

GeventWebSocketWorker
类?如果它们是从 Gunicorn 处理的,那么当 Gunicorn 符合 WSGI 并且 WSGI 似乎实际上不允许每个工作人员有一个以上的连接时,这怎么可能?

除了这些理论问题之外,我还想知道我可以使用此设置(大概)处理多少个 websocket 连接。

python gunicorn gevent flask-socketio gevent-socketio
1个回答
0
投票

我对 WSGI 的理解是,每个进来的请求(http 或 websocket)都会阻塞一个 worker,直到连接终止。这意味着此设置一次只能处理一个 websocket 连接。

如果您使用 Gunicorn 的“同步”工作者,这是正确的。如果您使用其中一个异步工作者(gevent 或 eventlet),您可以通过一个工作者获得数千个连接。您正在使用 gevent worker,所以这就是在您的案例中启用并发的原因。

我还想知道我可以使用此设置(大概)处理多少个 websocket 连接。

Flask-SocketIO 没有限制。 Gunicorn 我相信默认情况下每个工作人员使用 1000 个连接,但这可以通过配置进行更改。其他限制也可能会影响您的连接数,例如可以从操作系统分配的文件句柄数。

另请注意,您可以水平扩展服务器并以这种方式获得更多连接。

© www.soinside.com 2019 - 2024. All rights reserved.