WebSocketサーバーは何人まで耐えられるのか
HTTPと違い、WebSocket(ウェブソケット)は接続がずっと維持されるプロトコルです。接続者がページを離れない限り、サーバーはその接続のためのメモリとリソースを継続的に占有しなければなりません。そのため同時接続数が増えるほどメモリ使用量とメッセージ処理負荷が線形的に増加し、ある時点でサーバー1台の限界を超えてしまいます。
この計算機は同時接続数、接続当たりのメモリ使用量、1人当たり秒間メッセージ数、メッセージ平均サイズを入力して、予想総メモリ使用量と秒間必要帯域幅を計算します。また、サーバー1台が通常安定して処理できる同時接続数を1万人と仮定し、推奨サーバー台数も一緒に提示します。実際の限界値はサーバースペック、イベントループの処理方式、メッセージ処理ロジックによって変わるため、参考値として活用してください。
同時接続者が多いサービスなら、接続維持方式を最適化することが重要です。不要なheartbeat周期を延ばしたり、メッセージをバッチでまとめて送信したり、アイドル接続を自動終了するポリシーだけでもメモリと帯域幅の使用量を大きく減らせます。トラフィックの増加が予想される場合は、ロードバランサーの後ろに複数台のサーバーを配置する水平拡張(スケールアウト)構成を事前に準備するのが安全です。
よくある質問
サーバースペックとアプリケーション構造により異なりますが、この計算機は一般的な基準として1万人をデフォルト値に使用します。
heartbeat周期の調整、アイドル接続の終了、メッセージのバッチ送信などで接続当たりのリソース使用量を減らせます。
はい。メッセージの頻度とサイズが大きくなるほどネットワーク帯域幅の使用量も増加するため、一緒に考慮する必要があります。