Websocket很好,但它能处理1,000,000个并发连接吗?
保持1,000,000个websocket打开需要占用多少系统资源?
发布于 2013-07-03 23:20:52
已更新答案
Short answer:是的,但它很贵。
Long answer
这个问题并不是WebSockets独有的,因为WebSockets基本上是长寿的TCP套接字,具有类似HTTP样的握手和最小的消息成帧。
真正的问题是:单个服务器能否处理1,000,000个并发套接字连接?这将消耗哪些服务器资源?答案很复杂,有几个因素,但是对于一个适当规模的系统(大量的CPU、RAM和快速网络)以及经过调优的服务器系统和优化的服务器软件,1,000,000个并发活动套接字连接是可能的。
连接的数量不是主要问题(这主要是内核调优和足够内存的问题),而是处理和向/从每个连接发送/接收数据的问题。如果传入的连接分散在很长一段时间内,并且它们大多是空闲的或不频繁地发送小块的静态数据,那么您可能会获得比1,000,000个并发连接高得多的连接。然而,即使在这些情况下(大多数是空闲的慢连接),您仍然会遇到网络、服务器系统和服务器库的问题,这些网络、服务器系统和服务器库没有配置和设计来处理大量连接。
请参阅Alessandro Alinone关于500,000个连接的近似资源使用情况的回答。
以下是一些较旧但仍然适用的资源,可供阅读有关如何配置服务器和编写服务器软件以支持大量连接的信息:
发布于 2013-07-04 00:45:15
在今天的系统上,处理100万个并发TCP连接不是问题。
根据我们自己的测试,我可以肯定这一点(完全披露:我是Lightstreamer的首席技术官)。
我们不得不多次向我们的一些客户证明,在一个盒子上可以连接到100万个连接(而不一定是一台超级怪物机器)。但让我回顾一下我们测试500K并发连接的配置,因为这是最近在亚马逊EC2上执行的测试。
我们在一个m2.4xlarge实例上安装了Lightstreamer server (这是一个WebSocket服务器)。这意味着8核和68.4 GiB内存。
我们启动了11台客户机,以创建到Lightstreamer Server的500,000个并发连接。测试配置为来自服务器的总出站吞吐量为90,000个更新/秒,导致峰值为450 Mbit/s的出站带宽。
服务器从未使用超过13cpu的内存,GiB稳定在60%左右。
使用至少30个GiB内存,您可以处理100万个并发套接字。所需的CPU取决于所需的数据吞吐量。
https://stackoverflow.com/questions/17448061
复制相似问题