Bibliotecas WebSocket TypeScript: descripción completa y ejemplos prácticos
En el desarrollo web moderno, la tecnología WebSocket se ha convertido en el estándar para crear aplicaciones en tiempo real (real-time). Gracias a la conexión bidireccional permanente entre el cliente y el servidor, WebSocket es ideal para chats, juegos en línea, operadores bursátiles, sistemas de monitoreo y cualquier otro proyecto que requiera transmisión instantánea de datos. En este artículo, analizaremos en detalle las tres bibliotecas WebSocket principales para TypeScript: ws, Socket.IO y uWebSockets.js, incluyendo su instalación, configuración y ejemplos de código.
1. Biblioteca ws — WebSocket ligero y rápido para Node.js
La biblioteca ws es la implementación más popular y minimalista del protocolo WebSocket para Node.js. No agrega abstracciones adicionales, funciona directamente con el protocolo nativo y ofrece el máximo rendimiento. TypeScript es compatible a través de tipos que se pueden instalar por separado.
Instalación
npm install wsnpm install -D @types/wsEjemplo de un servidor simple en TypeScript
import { WebSocketServer, WebSocket } from 'ws';
const wss = new WebSocketServer({ port: 8080 });
wss.on('connection', (ws: WebSocket) => { console.log('Cliente conectado');
ws.on('message', (message: Buffer) => { console.log('Mensaje recibido:', message.toString()); // Enviar respuesta a todos los clientes conectados wss.clients.forEach((client) => { if (client.readyState === WebSocket.OPEN) { client.send(`Eco: ${message.toString()}`); } }); });
ws.on('close', () => { console.log('Cliente desconectado'); });});
console.log('Servidor WebSocket iniciado en ws://localhost:8080');Código del cliente (navegador)
const ws = new WebSocket('ws://localhost:8080');
ws.onopen = () => { console.log('Conexión establecida'); ws.send('¡Hola, servidor!');};
ws.onmessage = (event: MessageEvent) => { console.log('Respuesta del servidor:', event.data);};Ventajas: sobrecarga mínima, control total sobre el protocolo, ideal para sistemas de alta carga.
Desventajas: no tiene soporte integrado para salas, reconexión automática ni respaldo de transporte HTTP.
2. Socket.IO — solución universal con API enriquecida
Socket.IO no es solo WebSocket, sino un framework completo para comunicaciones en tiempo real. Utiliza WebSocket como transporte principal, pero cambia automáticamente a HTTP long-polling si WebSocket no está disponible (por ejemplo, detrás de un proxy o en navegadores antiguos). Socket.IO proporciona mecanismos listos para usar: salas, espacios de nombres (namespaces), reconexión automática, confirmación de entrega de mensajes (acknowledgements) y mucho más.
Instalación
npm install socket.io socket.io-clientnpm install -D @types/socket.ioEjemplo de servidor con salas en TypeScript
import { Server, Socket } from 'socket.io';import http from 'http';
const server = http.createServer();const io = new Server(server, { cors: { origin: '*' }});
io.on('connection', (socket: Socket) => { console.log('Usuario conectado:', socket.id);
// Unirse a una sala socket.on('join_room', (roomName: string) => { socket.join(roomName); socket.to(roomName).emit('user_joined', socket.id); });
// Enviar mensaje a una sala socket.on('room_message', (data: { room: string; message: string }) => { io.to(data.room).emit('new_message', { user: socket.id, text: data.message }); });
socket.on('disconnect', () => { console.log('Usuario desconectado:', socket.id); });});
server.listen(3000, () => { console.log('Servidor Socket.IO iniciado en el puerto También en la biblioteca
Trabajo con Markdown en Go: librerías blackfriday, goldmark y chroma
ORM para Swift (iOS/macOS): comparación y ejemplos de uso
Procesamiento de JSON en Java: bibliotecas y herramientas para trabajar con JSON
node-cache: Caché simple y eficiente en Node.js
Internacionalización (i18n) en Kotlin: Guía completa con ejemplos