内存占用

Socket.IO服务器消耗的资源主要取决于:

内存占用 - 图1信息

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

内存占用 - 图4备注

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

  1. io.on("connection", (socket) => {
  2. socket.on("disconnect", () => {
  3. const lastToDisconnect = io.of("/").sockets.size === 0;
  4. if (lastToDisconnect) {
  5. gc();
  6. }
  7. });
  8. });

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