Web 服务器可以维持多少个 SSE 连接?

How many SSE connections can a web server maintain?

我正在尝试使用服务器发送事件 (SSE) 作为 websockets 的替代方案来进行实时数据推送(我的应用程序中的数据主要是单向的)。

它的可扩展性如何?我知道每个 SSE 连接都使用一个 HTTP 请求——这是否意味着 Web 服务器可以处理与 HTTP 请求一样多的 SSE 连接(类似于 this answer)?我觉得可能是这种情况,但我不确定 SSE 连接是如何工作的,以及它是否比简单的 HTTP 请求 complex/resource-hungry 多得多。

我主要想知道这与浏览器可以保持打开的并发 websocket 数量相比如何。 This answer 建议服务器只能同时处理 ~1400-1800 个套接字。

有人可以对此提供一些见解吗?

(澄清一下,我不是在问 how many SSE connections can be kept open from the client;我是在问 Web 服务器可以合理地保持打开多少个。)

Tomcat 8(以网络服务器为例)及以上使用 NIO 连接器处理传入请求。它最多可以服务 10,000 个并发连接 (docs)。它本身并没有说明最大连接数。他们还提供了另一个名为 acceptCount 的参数,如果连接数超过 10,000,它将作为后备。

套接字连接被视为文件。每个到 tomcat 的传入连接就像打开一个套接字并且取决于 OS 例如 linux 取决于文件描述符策略。当打开的连接数过多或已达到最大连接数时,您会发现一个常见错误,如下所示

java.net.SocketException: Too many files open

您可以通过编辑更改打开的文件数

/etc/security/limits.conf

不清楚允许的最大限制是多少。有人说 tomcat 的默认值是 1096,但 linux 的(默认值)是 30,000,可以更改。

article 我分享了 linkedIn 团队能够在一台主机上建立 250K 连接。

所以这应该让您对可能的最大 sse 连接有一个很好的了解。取决于您的 Web 服务器最大连接配置、OS 容量等