Bibliotecas WebSocket TypeScript: ws, Socket.IO, 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 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/ws


Ejemplo 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.io


Ejemplo 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

Recommendations