Bibliotecas WebSocket para Node.js: ws, Socket.IO y uWebSockets.js

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Bibliotecas WebSocket para Node.js: desde un chat simple hasta sistemas de tiempo real de alta carga



WebSocket es un protocolo que proporciona una conexión bidireccional permanente entre el cliente y el servidor. A diferencia de HTTP, donde la solicitud-respuesta la inicia el cliente, WebSocket permite al servidor enviar datos en cualquier momento. Para Node.js, conocido por su asincronía y arquitectura basada en eventos, WebSocket se ha convertido en la elección natural para crear chats, juegos en línea, terminales de trading y transmisión de datos en streaming.



En este artículo, analizaremos tres bibliotecas principales: ws (ligera y rápida), Socket.IO (conveniente con mecanismos de respaldo) y uWebSockets.js (rendimiento récord). Aprenderá cuál elegir para su tarea y cómo escribir un chat simple con cada una de ellas.



1. Biblioteca ws — minimalismo y velocidad



ws es la biblioteca WebSocket más popular para Node.js. Implementa el protocolo puro RFC 6455 sin capas adicionales. Principales ventajas:

  • Máximo rendimiento: hasta más de 200 000 mensajes/segundo en un solo núcleo.
  • Cero dependencias: solo JavaScript puro.
  • Control total sobre la conexión: handshake, tramas, ping/pong.
  • Soporte para Buffer y Streams de Node.js para datos binarios.


Desventajas: no tiene reconexión automática, no tiene salas (rooms), no tiene respaldo a HTTP long-polling. Todo debe implementarse manualmente o mediante paquetes adicionales.



Ejemplo: servidor eco simple con ws



const WebSocket = require('ws');

const server = new WebSocket.Server({ port: 8080 });

server.on('connection', (ws) => { console.log('Cliente conectado');

ws.on('message', (message) => { console.log('Recibido:', message.toString()); // Enviar de vuelta (eco) ws.send(`Eco: ${message}`); });

ws.on('close', () => { console.log('Cliente desconectado'); });

// Enviar saludo al conectarse ws.send('¡Bienvenido al servidor WebSocket!');});

console.log('Servidor iniciado en ws://localhost:8080');


¿Cuándo elegir ws? — para microservicios, juegos de alta carga (donde cada fotograma importa), para integrar en su propio servidor HTTP (a través de server.on('upgrade')).



2. Socket.IO — comodidad y fiabilidad para producción



Socket.IO no es solo WebSocket, sino una plataforma de tiempo real completa. Utiliza WebSocket como transporte principal, pero cambia automáticamente a HTTP long-polling si WebSocket no es compatible (proxies, cortafuegos, navegadores antiguos).



  • Salas (Rooms) — agrupación de clientes para transmisiones broadcast.
  • Espacios de nombres (Namespaces) — división lógica de la aplicación (por ejemplo, /chat y /game).
  • Reconexión automática con retardo exponencial.
  • Soporte de eventos — trabaja con eventos, no con mensajes sin procesar.
  • Serialización integrada — transmisión de objetos JSON sin análisis manual.


Desventajas: sobrecarga del protocolo (paquetes adicionales con metadatos), más dependencias, ligeramente más lento que ws puro.



Ejemplo: chat con salas en Socket.IO (servidor)



const http = require('http');const { Server } = require('socket.io');

const server = http.createServer();const io = new Server(server, { cors: { origin: '*' } // para desarrollo});

io.on('connection', (socket) => { console.log('Nuevo cliente:', socket.id);

// Unirse a una sala socket.on('join_room', (roomName) => { socket.join(roomName); socket.emit('message', `Te has unido a la sala ${roomName}`); socket.to(roomName).emit('message', `El usuario ${socket.id} ha entrado a la sala`); });

// Enviar mensaje a la

Recommendations