Ir al contenido principal
Versión: 4.x

Uso de memoria

Los recursos consumidos por tu servidor Socket.IO dependerán principalmente de:

información

El uso de memoria del servidor Socket.IO debería escalar linealmente con el número de clientes conectados.

consejo

Por defecto, se mantiene en memoria una referencia a la primera solicitud HTTP de cada sesión. Esta referencia es necesaria cuando se trabaja con express-session por ejemplo (ver aquí), pero puede descartarse para ahorrar memoria:

io.engine.on("connection", (rawSocket) => {
rawSocket.request = null;
});

El código fuente para reproducir los resultados presentados en esta página se puede encontrar aquí.

Ver también:

Uso de memoria por implementación de servidor WebSocket

El uso de memoria del servidor Socket.IO depende en gran medida del uso de memoria de la implementación subyacente del servidor WebSocket.

El gráfico a continuación muestra el uso de memoria del servidor Socket.IO, desde 0 hasta 10,000 clientes conectados, con:

  • un servidor Socket.IO basado en el paquete ws (usado por defecto)
  • un servidor Socket.IO basado en el paquete eiows, una implementación de servidor WebSocket en C++ (ver pasos de instalación)
  • un servidor Socket.IO basado en el paquete µWebSockets.js, una alternativa en C++ al servidor HTTP nativo de Node.js (ver pasos de instalación)
  • un servidor WebSocket simple basado en el paquete ws

Gráfico del uso de memoria por implementación de servidor WebSocket

Probado en Ubuntu 22.04 LTS con Node.js v20.3.0, con las siguientes versiones de paquetes:

  • socket.io@4.7.2
  • eiows@6.7.2
  • uWebSockets.js@20.33.0
  • ws@8.11.0

Uso de memoria a lo largo del tiempo

El gráfico a continuación muestra el uso de memoria del servidor Socket.IO a lo largo del tiempo, desde 0 hasta 10,000 clientes conectados.

Gráfico del uso de memoria a lo largo del tiempo

nota

Para propósitos de demostración, llamamos manualmente al recolector de basura al final de cada ola de clientes:

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

Lo cual explica la caída limpia en el uso de memoria cuando el último cliente se desconecta. Esto no es necesario en tu aplicación, la recolección de basura se activará automáticamente cuando sea necesario.