Biblioteca ws: WebSocket para Node.js
La biblioteca ws es una implementación simple, rápida y completamente probada del protocolo WebSocket para Node.js. Es el estándar de facto para crear aplicaciones en tiempo real (chats, juegos en línea, notificaciones, edición colaborativa) en el lado del servidor de JavaScript. A diferencia del módulo http incorporado, ws proporciona una comunicación bidireccional completa entre el cliente y el servidor sin solicitudes HTTP constantes.
Características principales
- Soporte completo del protocolo RFC 6455 — funciona con todos los navegadores modernos.
- Alto rendimiento — consumo mínimo de memoria y baja latencia.
- API simple — creación de servidor y cliente en pocas líneas de código.
- Soporte de extensiones — compresión de datos (permessage-deflate).
- Integración con servidor HTTP — se puede compartir puerto con Express u otro framework.
- Reconexión automática — mecanismos integrados para el cliente.
Instalación
Instalación a través de npm:
npm install wsDespués de la instalación, la biblioteca está lista para usar.
Creación de un servidor WebSocket
Creemos un servidor simple que acepte conexiones y envíe un mensaje de bienvenida:
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });
wss.on('connection', function connection(ws) { console.log('Nuevo cliente conectado');
// Enviamos un mensaje al cliente ws.send('¡Bienvenido al servidor WebSocket!');
// Procesamos los mensajes entrantes ws.on('message', function incoming(message) { console.log('Recibido: %s', message); // Enviamos de vuelta (eco) ws.send('Eco: ' + message); });
// Procesamos el cierre de la conexión ws.on('close', function() { console.log('Cliente desconectado'); });});
console.log('Servidor WebSocket iniciado en ws://localhost:8080');Creación de un cliente WebSocket
El cliente se conecta al servidor, envía un mensaje y recibe una respuesta:
const WebSocket = require('ws');
const ws = new WebSocket('ws://localhost:8080');
ws.on('open', function open() { console.log('Conexión establecida'); ws.send('¡Hola, servidor!');});
ws.on('message', function incoming(data) { console.log('Respuesta del servidor: %s', data); ws.close();});
ws.on('close', function() { console.log('Conexión cerrada');});
ws.on('error', function error(err) { console.error('Error:', err.message);});Trabajo con JSON y múltiples clientes
Un ejemplo real: un servidor de chat que difunde mensajes a todos los clientes conectados (broadcast):
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });
wss.on('connection', function connection(ws, req) { console.log('Cliente conectado. Total de clientes:', wss.clients.size);
ws.on('message', function incoming(message) { // Parseamos JSON let data; try { data = JSON.parse(message); } catch (e) { ws.send(JSON.stringify({ error: 'JSON incorrecto' })); return; }
// Difundimos a todos excepto al remitente wss.clients.forEach(function each(client) { if (client !== ws && client.readyState === WebSocket.OPEN) { client.send(JSON.stringify({ username: data.username, text: data.text, timestamp: Date.now() })); } }); });
ws.send(JSON.stringify({ system: '¡Bienvenido al chat!' }));});El cliente puede enviar JSON:
ws.send(JSON.stringify({ username: 'Alicia', text: '¡Hola a todos!' }));Integración con servidor HTTP
También en la biblioteca
Registro para JavaScript (Node.js): las mejores soluciones
Frameworks CLI para Java: visión general y comparación de las mejores herramientas
Migraciones de bases de datos en Java: revisión de herramientas y bibliotecas
Gson para Java: guía completa con ejemplos