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

Jon*_*Lam 6 webserver websocket server-sent-events

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

这将有多大的可扩展性?我知道每个 SSE 连接都使用一个 HTTP 请求——这是否意味着 Web 服务器可以处理与 HTTP 请求一样多的 SSE 连接(类似于这个答案)?我觉得可能是这种情况,但我不确定 SSE 连接是如何工作的,以及它是否比简单的 HTTP 请求更复杂/更需要资源。

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

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

(澄清一下,我不是在问有多少 SSE 连接可以从客户端保持打开状态;我问的是 Web 服务器可以合理地保持打开多少个连接。)

小智 2

Tomcat 8(以 Web 服务器为例)及更高版本使用 NIO 连接器来处理传入请求。它最多可以服务 10,000 个并发连接(文档)。它本身没有说明最大连接数。他们还提供了另一个名为acceptCount 的参数,如果连接超过 10,000,则该参数会回退。

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

java.net.SocketException: Too many files open
Run Code Online (Sandbox Code Playgroud)

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

/etc/security/limits.conf
Run Code Online (Sandbox Code Playgroud)

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

在我分享的文章中,linkedIn 团队能够在一台主机上实现 250K 连接。

因此,这应该能让您对可能的最大 sse 连接数有一个很好的了解。取决于您的网络服务器最大连接配置、操作系统容量等。