回答:
更新された回答
短い答え:はい、しかしそれは高価です。
長い答え:
WebSocketは根本的に長命のTCPソケットであり、HTTPのようなハンドシェイクとメッセージの最小限のフレーミングであるため、この質問はWebSocketに固有のものではありません。
本当の質問は:単一のサーバーが1,000,000の同時ソケット接続を処理できるか、そしてこれはどのサーバーリソースを消費するか?答えはいくつかの要因によって複雑になりますが、適切なサイズのシステム(CPU、RAM、高速ネットワーク)で、サーバーシステムの調整とサーバーソフトウェアの最適化により、1,000,000の同時アクティブソケット接続が可能です。
接続の数は主要な問題ではありません(これは、ほとんどの場合、カーネルのチューニングと十分なメモリの問題です)。これらの接続のそれぞれに対するデータの処理と送受信です。着信接続が長期間にわたって広がっており、それらがほとんどアイドル状態であるか、静的データの小さなチャンクをほとんど送信していない場合、おそらく1,000,000の同時接続よりもはるかに多くなる可能性があります。ただし、これらの状況(ほとんどがアイドル状態の低速接続)でも、多数の接続を処理するように構成および設計されていないネットワーク、サーバーシステム、およびサーバーライブラリで問題が発生します。
500,000接続のおよそのリソース使用量については、Alessandro Alinoneの回答を参照してください。
サーバーを構成し、多数の接続をサポートするようにサーバーソフトウェアを作成する方法を読むための、古いがまだ適用可能なリソースを次に示します。
今日のシステムでは、100万の同時TCP接続の処理は問題になりません。
私たち自身のテストに基づいてそれを確認できます(完全な開示:私はLightstreamerのCTOです)。
一部のお客様には、1つのボックスで100万の接続に到達できることを何度も示す必要がありました(必ずしもスーパーモンスターマシンではありません)。ただし、これはAmazon EC2で実行された最近のテストであるため、500Kの同時接続をテストした構成を要約します。
Lightstreamer Server(特にWebSocketサーバー)をm2.4xlargeインスタンスにインストールしました。これは、8コアと68.4 GiBメモリを意味します。
11台のクライアントマシンを立ち上げ、Lightstreamerサーバーへの500,000の同時接続を作成しました。テストは、サーバーからの合計アウトバウンドスループットが90,000更新/秒になるように構成され、その結果、450 Mbit /秒のアウトバウンド帯域幅のピークが発生しました。
サーバーは13 GiBを超えるRAMを使用することはなく、CPUは60%前後で安定していました。
少なくとも30 GiBのRAMがあれば、100万の同時ソケットを処理できます。必要なCPUは、必要なデータスループットによって異なります。