内存占用
Socket.IO服务器消耗的资源主要取决于:
信息
Socket.IO服务器的内存使用量应与连接的客户端数量成线性关系。
在这里可以找到重现本页所展示的结果的源代码。
另请参见:
每个WebSocket服务器实现的内存使用情况
Socket.IO服务器的内存使用严重依赖于底层WebSocket服务器实现的内存使用。
下图显示了Socket.IO服务器的内存使用情况,从0到10000个连接的客户端,包括:
- 基于ws 包的Socket.IO服务器(默认使用)
- 基于eiows 包的Socket.IO服务器,一个C++的WebSocket服务器实现(见安装步骤)
- 基于µWebSockets.js包的Socket.IO服务器,是Node.js本地HTTP服务器的C++替代方案(见安装步骤)
- 基于ws包的普通WebSocket服务器
使用Node.js v16.18.1
在Ubuntu 20.04.5 LTS
上测试,软件包版本如下:
socket.io@4.5.4
eiows@3.8.0
uWebSockets.js@20.4.0
ws@8.2.3
随时间变化的内存使用情况
下图显示了Socket.IO服务器在一段时间内的内存使用情况,从0到10000个连接的客户端。
备注
出于演示目的,我们在每一波客户端结束时手动调用垃圾收集器:
io.on("connection", (socket) => {
socket.on("disconnect", () => {
const lastToDisconnect = io.of("/").sockets.size === 0;
if (lastToDisconnect) {
gc();
}
});
});
这解释了当最后一个客户端断开连接时,内存使用率的下降。这在您的应用程序中是不需要的,垃圾收集将在必要时自动触发。