我正在尝试使用服务器发送事件(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;我是在问Web服务器可以合理地保持打开多少。)
答案 0 :(得分: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服务器的最大连接配置,操作系统容量等。