メモリ使用量
Socket.IO サーバーが消費するリソースは、主に以下の要素に依存します。
- 接続されているクライアントの数
- 1秒間に送受信されるメッセージの数 (基本的なemit、確認応答付きemit、ブロードキャスト)
情報
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サーバー
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サーバーのメモリ使用量を示しています。
注意
デモ目的のため、各クライアントの波の最後にガベージコレクタを手動で呼び出しています。
io.on("connection", (socket) => {
socket.on("disconnect", () => {
const lastToDisconnect = io.of("/").sockets.size === 0;
if (lastToDisconnect) {
gc();
}
});
});
これは、最後のクライアントが切断されたときのメモリのクリーンな減少を説明しています。これはアプリケーションでは必要ありません。ガベージコレクションは必要に応じて自動的にトリガーされます。