記憶體使用量
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 伺服器
在 Node.js v20.3.0
的 Ubuntu 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 個已連線的用戶端。
註
為了示範目的,我們在每波客戶端結束時手動呼叫垃圾收集器
io.on("connection", (socket) => {
socket.on("disconnect", () => {
const lastToDisconnect = io.of("/").sockets.size === 0;
if (lastToDisconnect) {
gc();
}
});
});
這說明了最後一個客戶端斷線時記憶體使用量乾淨下降。您的應用程式不需要這樣做,垃圾收集會在必要時自動觸發。