Bibliotecas WebSocket para Node.js: ws, Socket.IO y µWebSockets
WebSocket es un protocolo que proporciona una conexión bidireccional persistente entre el cliente y el servidor. En el ecosistema de Node.js existen varias bibliotecas populares que implementan este protocolo. En este artículo revisaremos tres principales: ws, Socket.IO y µWebSockets (uWS). Aprenderá cómo instalarlas, escribir un servidor de chat simple y elegir la herramienta adecuada para su tarea.
1. Biblioteca ws — ligera y de alto rendimiento
ws es la biblioteca WebSocket más popular y rápida para Node.js. Implementa el protocolo WebSocket puro sin capas adicionales, lo que proporciona una sobrecarga mínima y la máxima velocidad.
Instalación
npm install wsEjemplo: servidor eco
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}`); ws.send(`Eco: ${message}`); });
ws.on('close', () => { console.log('Cliente desconectado'); });});
console.log('Servidor WebSocket iniciado en ws://localhost:8080');Parte del cliente (navegador)
const socket = new WebSocket('ws://localhost:8080');
socket.onopen = () => { console.log('Conexión establecida'); socket.send('¡Hola, servidor!');};
socket.onmessage = (event) => { console.log('Respuesta del servidor:', event.data);};
socket.onerror = (error) => { console.error('Error de WebSocket:', error);};Características de ws:
- Rendimiento: de 2 a 3 veces más rápido que Socket.IO en pruebas de rendimiento.
- Minimalismo: no tiene mecanismos integrados de reconexión, salas o transportes alternativos.
- Soporte: compatibilidad total con RFC 6455.
- Uso: ideal para aplicaciones en tiempo real donde la velocidad es crítica (datos bursátiles, juegos, chats de alta carga).
2. Socket.IO — comodidad y fiabilidad para producción
Socket.IO no es solo una biblioteca WebSocket, sino un framework completo para aplicaciones en tiempo real. Añade sobre WebSocket: reconexión automática, salas, espacios de nombres, soporte alternativo de long-polling (si WebSocket no es compatible) y una API conveniente.
Instalación
npm install socket.ioEjemplo: servidor de chat simple
const http = require('http');const { Server } = require('socket.io');
const server = http.createServer();const io = new Server(server, { cors: { origin: '*' }});
io.on('connection', (socket) => { console.log(`Usuario conectado: ${socket.id}`);
socket.on('chat message', (msg) => { console.log(`Mensaje: ${msg}`); io.emit('chat message', msg); // envía a todos });
socket.on('disconnect', () => { console.log(`Usuario desconectado: ${socket.id}`); });});
server.listen(3000, () => { console.log('Servidor Socket.IO en http://localhost:3000');});Parte del cliente (navegador)
<script src="/socket.io/socket.io.js"></script><script> const socket = io('http://localhost:3000');
socket.on('connect', () => { console.log('Conectado al servidor'); socket.emit('chat message', '¡Hola a todos!'); });
socket.on('chat message', (msg) => { const item = document.createElement('li'); item.textContent = msg; document.getElementById('messages').appendChild(item); });</script>Características de Socket.IO:
- Reconexión automática: cuando se pierde la conexión, el cliente intenta restablecerla automáticamente.
También en la biblioteca
Recommendations