Definición
Los WebSockets son un protocolo de comunicación que permite abrir un canal persistente, bidireccional y full‑dúplex entre un cliente (por ejemplo, un navegador) y un servidor.
En palabras simples:
Esto habilita comunicación en tiempo real, esencial en aplicaciones modernas como chats, juegos en línea, notificaciones instantáneas, plataformas de trading o monitoreo en vivo.
Aspecto | HTTP (request‑response) | WebSockets (tiempo real) |
---|---|---|
Conexión | Se abre y se cierra en cada petición | Se abre una vez y permanece activa |
Comunicación | Solo el cliente inicia la interacción | Cliente y servidor envían mensajes libremente |
Eficiencia | Más overhead (encabezados en cada request) | Liviano: solo se transmite el mensaje |
Latencia | Alta (depende de peticiones periódicas) | Baja (casi instantánea) |
Casos típicos | Cargar páginas, APIs REST | Chats, juegos, trading, colaboración en tiempo real |
// Crear una conexión WebSocket
const socket = new WebSocket("ws://localhost:8080");
// Evento cuando se abre la conexión
socket.onopen = () => {
console.log("Conexión establecida con el servidor");
socket.send("Hola servidor, soy el cliente!");
};
// Evento cuando llega un mensaje del servidor
socket.onmessage = (event) => {
console.log("Mensaje recibido:", event.data);
};
// Evento cuando se cierra la conexión
socket.onclose = () => {
console.log("Conexión cerrada");
};
// Manejo de errores (opcional)
socket.onerror = (err) => {
console.error("Error en WebSocket:", err);
};
// Instalar la librería una vez: npm install ws
const WebSocket = require("ws");
// Crear servidor WebSocket en el puerto 8080
const wss = new WebSocket.Server({ port: 8080 });
wss.on("connection", (ws) => {
console.log("Cliente conectado");
// Enviar mensaje al cliente
ws.send("Bienvenido al servidor WebSocket!");
// Recibir mensajes del cliente
ws.on("message", (message) => {
console.log("Mensaje del cliente:", message);
ws.send("Recibí tu mensaje: " + message);
});
// Detectar cierre
ws.on("close", () => {
console.log("Cliente desconectado");
});
});
Para el ejemplo del servidor se utiliza Node.js y la librería ws.
Los WebSockets permiten aplicaciones web interactivas y en tiempo real, superando las limitaciones del modelo de petición/respuesta de HTTP y reduciendo latencia y uso de recursos.