本文へスキップ
バージョン: 4.x

メモリ使用量

Socket.IO サーバーが消費するリソースは、主に以下の要素に依存します。

情報

Socket.IO サーバーのメモリ使用量は、接続されているクライアントの数に**線形に**比例して増加します。

ヒント

デフォルトでは、各セッションの最初のHTTPリクエストへの参照がメモリに保持されます。この参照は、例えばexpress-sessionを使用する場合に必要ですが(こちらを参照)、メモリを節約するために破棄できます。

io.engine.on("connection", (rawSocket) => {
rawSocket.request = null;
});

このページで提示された結果を再現するためのソースコードは、こちらにあります。

関連項目

WebSocketサーバー実装ごとのメモリ使用量

Socket.IO サーバーのメモリ使用量は、基盤となるWebSocketサーバー実装のメモリ使用量に大きく依存します。

以下のグラフは、0〜10,000個の接続クライアントにおけるSocket.IOサーバーのメモリ使用量を示しています。

  • ws パッケージ(デフォルトで使用)をベースとしたSocket.IOサーバー
  • eiows パッケージ、C++ WebSocketサーバー実装をベースとしたSocket.IOサーバー(インストール手順を参照)
  • µWebSockets.js パッケージ、Node.jsネイティブHTTPサーバーのC++代替をベースとしたSocket.IOサーバー(インストール手順を参照)
  • ws パッケージをベースとしたプレーンなWebSocketサーバー

Chart of the memory usage per WebSocket server implementation

Ubuntu 22.04 LTS、Node.js v20.3.0 でテスト済み。以下のパッケージバージョンを使用

  • socket.io@4.7.2
  • eiows@6.7.2
  • uWebSockets.js@20.33.0
  • ws@8.11.0

時間経過によるメモリ使用量

以下のグラフは、0〜10,000個の接続クライアントにおける、時間経過によるSocket.IOサーバーのメモリ使用量を示しています。

Chart of the memory usage over time

注意

デモ目的のため、各クライアントの波の最後にガベージコレクタを手動で呼び出しています。

io.on("connection", (socket) => {
socket.on("disconnect", () => {
const lastToDisconnect = io.of("/").sockets.size === 0;
if (lastToDisconnect) {
gc();
}
});
});

これは、最後のクライアントが切断されたときのメモリのクリーンな減少を説明しています。これはアプリケーションでは必要ありません。ガベージコレクションは必要に応じて自動的にトリガーされます。