跳至主要內容
版本:4.x

記憶體使用量

Socket.IO 伺服器消耗的資源主要取決於

資訊

Socket.IO 伺服器的記憶體使用量應與已連線用戶端數量線性擴充。

提示

預設情況下,會在記憶體中保留每個階段的第一次 HTTP 請求的參考。例如,在使用 `express-session` 時需要此參考(請參閱此處),但可以捨棄它來節省記憶體

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

可以在此處找到用於重現此頁面中顯示結果的原始程式碼。

另請參閱

每個 WebSocket 伺服器實作的記憶體使用量

Socket.IO 伺服器的記憶體使用量在很大程度上取決於底層 WebSocket 伺服器實作的記憶體使用量。

下表顯示 Socket.IO 伺服器的記憶體使用量,從 0 到 10,000 個已連線的用戶端,以及

  • 基於 ws 套件的 Socket.IO 伺服器(預設使用)
  • 基於 eiows 套件的 Socket.IO 伺服器,C++ WebSocket 伺服器實作(請參閱安裝步驟
  • 基於 µWebSockets.js 套件的 Socket.IO 伺服器,Node.js 原生 HTTP 伺服器的 C++ 替代方案(請參閱安裝步驟
  • 基於 ws 套件的純 WebSocket 伺服器

Chart of the memory usage per WebSocket server implementation

在 Node.js v20.3.0Ubuntu 22.04 LTS 上測試,套件版本如下

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

記憶體使用量隨時間推移

下表顯示 Socket.IO 伺服器的記憶體使用量隨時間推移,從 0 到 10,000 個已連線的用戶端。

Chart of the memory usage over time

為了示範目的,我們在每波客戶端結束時手動呼叫垃圾收集器

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

這說明了最後一個客戶端斷線時記憶體使用量乾淨下降。您的應用程式不需要這樣做,垃圾收集會在必要時自動觸發。