Websocket 很好,但是它能够处理1,000,000个并发连接吗?
保持1,000,000个 websocket 开放需要多少系统资源?
谢谢!
更新答案
简短的回答 : 是的,但是它很贵。
长回答 :
这个问题并不是 WebSocket 独有的,因为 WebSocket 基本上是长寿的 TCP 套接字,具有类 HTTP 的握手和最小的消息框架。
真正的问题是: 一台服务器能够同时处理1,000,000个套接字连接吗? 这会消耗哪些服务器资源?答案是复杂的几个因素,但1,000,000同时活跃的套接字连接是可能的一个适当的规模的系统(大量的 CPU,RAM 和快速网络) ,并与优化的服务器系统和服务器软件。
连接的数量不是主要问题(主要是内核调优和足够内存的问题) ,而是处理和发送/接收每个连接的数据。如果传入的连接分散在很长一段时间内,并且它们大多数是空闲的,或者很少发送小块静态数据,那么您可能获得的并发连接数量甚至可能远远超过1,000,000个。然而,即使在这些条件下(大部分是空闲的缓慢连接) ,您仍然会遇到网络、服务器系统和服务器库没有配置和设计来处理大量连接的问题。
请参阅 AlessandroAlinone 关于500,000个连接的大致资源使用情况的答案。
这里有一些旧的,但仍然适用的资源,可以阅读如何配置您的服务器和编写您的服务器软件,以支持大量的连接:
在当今的系统中,处理100万个并发 TCP 连接不是问题。
基于我们自己的测试,我可以肯定这一点(完全公开: 我是 Lightstream 的首席技术官)。
我们不得不多次向我们的一些客户证明,一个盒子可以连接100万个连接(不一定是超级巨型机器)。但是让我们回顾一下我们测试500K 并发连接的配置,因为这是最近在 Amazon EC2上执行的一个测试。
我们在一个 m2.4 xlarge 实例上安装了 Lightstream Server (它是一个 WebSocket 服务器等等)。这意味着8个核心和68.4 GiB 内存。
我们启动了11台客户机,创建了500,000个到 Lightstream 服务器的并发连接。测试被配置为服务器的总出站吞吐量为90,000个更新/秒,导致出站带宽达到450 Mbit/s 的峰值。
服务器从未使用超过13GiB 的内存,CPU 稳定在60% 左右。
使用至少30GiB 内存,您可以处理100万个并发套接字。所需的 CPU 取决于所需的数据吞吐量。