内存占用
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服务器
[画像:Chart of the memory usage per WebSocket server implementation]
使用Node.js v16.18.1在Ubuntu 20.04.5 LTS上测试,软件包版本如下:
socket.io@4.5.4eiows@3.8.0uWebSockets.js@20.4.0ws@8.2.3
随时间变化的内存使用情况
下图显示了Socket.IO服务器在一段时间内的内存使用情况,从0到10000个连接的客户端。
[画像:Chart of the memory usage over time]
备注
出于演示目的,我们在每一波客户端结束时手动调用垃圾收集器:
io.on("connection",(socket)=>{
socket.on("disconnect",()=>{
const lastToDisconnect = io.of("/").sockets.size===0;
if(lastToDisconnect){
gc();
}
});
});
这解释了当最后一个客户端断开连接时,内存使用率的下降。这在您的应用程序中是不需要的,垃圾收集将在必要时自动触发。