内存使用
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 服务器,一个 C++ 替代 Node.js 原生 HTTP 服务器(参见 安装步骤) - 基于
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
内存使用量随时间变化
下图显示了 Socket.IO 服务器的内存使用量随时间变化,从 0 到 10 000 个连接的客户端。
注意
为了演示目的,我们在每次客户端浪潮结束时手动调用垃圾收集器。
io.on("connection", (socket) => {
socket.on("disconnect", () => {
const lastToDisconnect = io.of("/").sockets.size === 0;
if (lastToDisconnect) {
gc();
}
});
});
这解释了最后一个客户端断开连接时内存使用量的干净下降。在您的应用程序中不需要这样做,垃圾收集将在必要时自动触发。