Uso de memoria
Los recursos consumidos por tu servidor Socket.IO dependerán principalmente de:
- el número de clientes conectados
- el número de mensajes (emit básico, emit con confirmación y broadcast) recibidos y enviados por segundo
El uso de memoria del servidor Socket.IO debería escalar linealmente con el número de clientes conectados.
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

Probado en Ubuntu 22.04 LTS con Node.js v20.3.0, con las siguientes versiones de paquetes:
socket.io@4.7.2eiows@6.7.2uWebSockets.js@20.33.0ws@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.

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.