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

Posted

技术标签:

【中文标题】Web 服务器可以维护多少个 SSE 连接?【英文标题】:How many SSE connections can a web server maintain? 【发布时间】:2019-04-07 17:44:29 【问题描述】:

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

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

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

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

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

【问题讨论】:

您是否为此制定了任何基准?如果您确实迁移到 SSE,您在哪种机器上处理多少个连接? 【参考方案1】:

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

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

java.net.SocketException: Too many files open

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

/etc/security/limits.conf

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

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

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

【讨论】:

以上是关于Web 服务器可以维护多少个 SSE 连接?的主要内容,如果未能解决你的问题,请参考以下文章

Spring中的SSE(服务器端事件)——存储SseEmitters

Web服务器可以处理多少个套接字连接?

转载干货 | 长连接/websocket/SSE等主流服务器推送技术比较

Java Servlet 和 SSE 中的连接关闭

Web端即时通讯实践:实现单机几十万条长连接

SSE Emitter:管理超时和完成()