将保留多少系统资源以保持1000000个websocket处于打开状态?
Websocket很好,但它能处理1000000个并发连接吗?将保留多少系统资源以保持1000000个websocket处于打开状态?,websocket,Websocket,Websocket很好,但它能处理1000000个并发连接吗? 将保留多少系统资源以保持1000000个websocket处于打开状态?更新的答案 简短回答:是的,但是很贵 长答案: 这个问题不是WebSocket独有的,因为WebSocket基本上是长寿命的TCP套接字,具有类似HTTP的握手和最小的消息帧 真正的问题是:单个服务器能否同时处理1000000个套接字连接,这将消耗哪些服务器资源?答案是复杂的,有几个因素,但对于一个适当大小的系统(大量CPU、RAM和快速网络),以及一个经过调优
将保留多少系统资源以保持1000000个websocket处于打开状态?更新的答案 简短回答:是的,但是很贵 长答案: 这个问题不是WebSocket独有的,因为WebSocket基本上是长寿命的TCP套接字,具有类似HTTP的握手和最小的消息帧 真正的问题是:单个服务器能否同时处理1000000个套接字连接,这将消耗哪些服务器资源?答案是复杂的,有几个因素,但对于一个适当大小的系统(大量CPU、RAM和快速网络),以及一个经过调优的服务器系统和优化的服务器软件,1000000个同时活动的套接字连接是可能的 连接的数量不是主要问题(这主要是内核调优和足够内存的问题),而是处理和向每个连接发送/接收数据。如果传入的连接分布在很长的一段时间内,并且它们大多处于空闲状态,或者很少发送小块静态数据,那么您可能会获得比1000000个同时连接多得多的连接。但是,即使在这些条件下(连接速度慢,大部分处于空闲状态),您仍然会遇到网络、服务器系统和服务器库的问题,这些网络、服务器系统和服务器库没有配置和设计为处理大量连接 请参阅Alessandro Alinone关于500000个连接的近似资源使用率的回答 以下是一些较旧但仍然适用的资源,可以阅读如何配置服务器和编写服务器软件以支持大量连接:
使用至少30 GiB的RAM,您可以处理100万个并发套接字。所需的CPU取决于所需的数据吞吐量。我假设这是某种linux风格。你能分享一下内核是如何调整的吗?最大文件描述符/tcp窗口大小等?这是普通的Amazon Linux。增加了最大文件描述符。TCP发送缓冲区减少到1600字节(默认情况下由Lightstreamer完成,但可以手动调整)。MSS是默认的。这个软件是完全免费的还是需要一些费用才能使用?@AvtandilKavrelishvili:既有免费版也有付费版。通常,轮询有两种类型(定期轮询和长轮询)比持久的websocket连接给服务器带来更多的负载。显然,单个JVM上可能有1200万个套接字连接。看看他们是怎么做到的@JacquesKoorts thxI认为websocket连接的总数本身并不是一个问题,内核可以处理1000万个以上的连接。问题在于服务器上的缓冲(例如,如果需要将大量数据推送到多个套接字,而客户端没有刷新套接字,则最终会为传出TCP/IP缓冲区保留大量RAM)和每个套接字的数据。例如,如果在服务器上运行Node.js,则每个连接的总RAM将包含与单个连接相关的任何对象。从理论上讲,我们也可以对其进行优化,但这将非常昂贵,因为您需要与Linux内核类似的代码质量。