답변:
업데이트 된 답변
짧은 대답 : 네,하지만 비싸요.
긴 대답 :
이 질문은 WebSocket에만 국한되지 않습니다. WebSocket은 기본적으로 HTTP와 유사한 핸드 셰이크와 최소한의 메시지 프레임을 사용하는 수명이 긴 TCP 소켓이기 때문입니다.
진짜 질문은 단일 서버가 1,000,000 개의 동시 소켓 연결을 처리 할 수 있으며 이것이 소비하는 서버 리소스는 무엇입니까? 대답은 여러 요인으로 인해 복잡하지만 적절한 크기의 시스템 (많은 CPU, RAM 및 빠른 네트워킹)과 조정 된 서버 시스템 및 최적화 된 서버 소프트웨어를 사용하면 1,000,000 개의 동시 활성 소켓 연결이 가능합니다.
연결 수는 주요 문제가 아닙니다 (대부분 커널 튜닝 및 충분한 메모리 문제). 각 연결에서 데이터를 처리하고 송수신하는 것입니다. 들어오는 연결이 장기간에 걸쳐 분산되어 있고 대부분 유휴 상태이거나 가끔씩 작은 덩어리의 정적 데이터를 전송하는 경우 동시 연결 수는 1,000,000 개보다 훨씬 더 많을 수 있습니다. 그러나 이러한 조건 (대부분 유휴 상태 인 느린 연결)에서도 많은 수의 연결을 처리하도록 구성 및 설계되지 않은 네트워크, 서버 시스템 및 서버 라이브러리에 문제가 발생합니다.
500,000 연결에 대한 대략적인 리소스 사용량에 대한 Alessandro Alinone의 답변을 참조하십시오.
다음은 많은 수의 연결을 지원하도록 서버를 구성하고 서버 소프트웨어를 작성하는 방법에 대해 읽어 볼 수있는 오래되었지만 여전히 적용 가능한 리소스입니다.
오늘날의 시스템에서 1 백만 개의 동시 TCP 연결을 처리하는 것은 문제가되지 않습니다.
자체 테스트를 통해 확인할 수 있습니다 (전체 공개 : 저는 Lightstreamer의 CTO입니다).
우리는 일부 고객에게 단일 상자에서 100 만 개의 연결에 도달 할 수 있음을 여러 번 증명해야했습니다 (반드시 슈퍼 몬스터 머신 일 필요는 없음). 그러나 이것은 Amazon EC2에서 수행 된 훨씬 더 최근의 테스트이므로 500K 동시 연결을 테스트 한 구성을 다시 요약하겠습니다.
우리는 m2.4xlarge 인스턴스에 Lightstreamer 서버 (특히 WebSocket 서버)를 설치했습니다. 이는 8 코어와 68.4GiB 메모리를 의미합니다.
Lightstreamer 서버에 500,000 개의 동시 연결을 생성하기 위해 11 개의 클라이언트 시스템을 출시했습니다. 테스트는 서버의 총 아웃 바운드 처리량이 90,000 개 업데이트 / 초가되도록 구성되어 450Mbit / s의 아웃 바운드 대역폭이 최고가되도록했습니다.
서버는 13GiB 이상의 RAM을 사용하지 않았으며 CPU는 약 60 % 안정적이었습니다.
최소 30GiB RAM으로 1 백만 개의 동시 소켓을 처리 할 수 있습니다. 필요한 CPU는 필요한 데이터 처리량에 따라 다릅니다.