WebSocket en Node.js: biblioteca ws para tiempo real

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

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 ws

Despué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

Recommendations