转到主要内容
版本:4.x

内存占用

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.1Ubuntu 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个连接的客户端。

Chart of the memory usage over time

备注

出于演示目的,我们在每一波客户端结束时手动调用垃圾收集器:

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

这解释了当最后一个客户端断开连接时,内存使用率的下降。这在您的应用程序中是不需要的,垃圾收集将在必要时自动触发。