Mejores prácticas en tiempo real
Un resumen condensado de las 25 prácticas en tiempo real más importantes para backends Node.js, extraídas de cada página de esta sección.
Busca en todas las páginas de la documentación
Un resumen condensado de las 25 prácticas en tiempo real más importantes para backends Node.js, extraídas de cada página de esta sección.
Elige el protocolo según la direccionalidad: SSE para push del servidor; WebSocket para bidireccional - Conceptos básicos en tiempo real.
Autentica en la actualización de la conexión: Valida el token antes de que se complete el handshake de WebSocket.
Nunca autentiques después de que fluyan los mensajes: Rechaza las conexiones no autenticadas inmediatamente.
Latido ping/pong cada 30s: Detecta y termina las conexiones muertas - Librería ws.
Limpia al desconectar: Elimina de los conjuntos de clientes; borra intervalos y listeners.
Usa salas para distribución dirigida: No io.emit() a cada cliente conectado - Socket.IO.
Adaptador Redis antes de la segunda instancia: Las salas de Socket.IO se rompen sin él - Escalado en tiempo real.
Redis pub/sub para escalado de ws puro: Cada instancia distribuye solo a clientes locales.
Sesiones pegajosas para transporte de sondeo: ip_hash o sessionAffinity de K8s.
Deshabilita el almacenamiento en búfer de nginx para SSE: proxy_buffering off y X-Accel-Buffering: no.
Configura los encabezados SSE correctamente: text/event-stream, no-cache, keep-alive.
Maneja la reconexión del cliente: SSE se reconecta automáticamente; WebSocket necesita lógica de reintento del cliente.
Valida los mensajes JSON: try/catch en JSON.parse en los manejadores de mensajes.
Límite de velocidad de mensajes por socket: Desconecta a los clientes abusivos.
Monitorea bufferedAmount: Cierra clientes lentos (contrapresión).
Límites de conexión por instancia: Planifica 10k-50k inactivos; menos con distribución activa.
Exporta la métrica de recuento de conexiones: Prometheus + HPA para autoescalado.
Apagado elegante en SIGTERM: Notifica a los clientes, drena, wss.close().
Usa el protocolo de mensajes JSON con campo type: Enrutamiento de mensajes extensible.
No uses WebSocket para CRUD: HTTP REST para solicitudes; WS solo para push.
Termina TLS en el proxy: wss:// en el borde, ws:// a Node.
Prueba con una configuración real de múltiples instancias: Dos procesos detrás de nginx.
Planifica Redis HA: Sentinel o Cluster; pub/sub es un punto único de fallo.
Registra eventos de conexión/desconexión: Incluye ID de usuario y recuento de conexiones.
Documenta la elección del protocolo en ADR: Por qué SSE vs WebSocket para esta característica.
Escalar a múltiples instancias sin un adaptador Redis o pub/sub. Los mensajes solo llegan a los clientes en el mismo servidor.
SSE. Las notificaciones son de servidor a cliente. Infraestructura más simple y reconexión automática.
Cuando necesitas salas, fallback de transporte y un adaptador Redis incorporado. ws puro para control mínimo.
Cliente WebSocket en pruebas de integración. Para múltiples instancias, ejecuta dos procesos y verifica la entrega entre instancias.
Planifica la arquitectura de escalado antes de 1000 conexiones concurrentes. Implementa Redis y sesiones pegajosas antes de la segunda réplica.
Versiones de la pila: Esta página fue escrita para Node.js 24.18.0 (LTS activa), npm 10+, TypeScript 5.6+, Express 5, Fastify 5 y NestJS 11.
Revisado por Chris St. John·Última actualización: 19 jul 2026