Introducción
HTTP y WebSockets conviven en la web moderna, pero siguen filosofías de comunicación muy diferentes.
HTTP fue diseñado en los 90 para transmitir documentos estáticos bajo un modelo request‑response, donde el cliente pide y el servidor responde.
WebSockets nacen para cubrir la necesidad de interacción en tiempo real, con comunicación bidireccional y persistente entre cliente y servidor.
El cliente (por ejemplo, un navegador) siempre inicia la comunicación. El servidor responde, pero no envía información por iniciativa propia.
Tras la negociación inicial (HTTP Upgrade o handshake), el canal queda abierto y ambas partes pueden enviar mensajes cuando lo necesiten, sin solicitudes adicionales.
HTTP tradicional
WebSockets
// Consulta cada 5 segundos al servidor
setInterval(async () => {
const response = await fetch("/mensajes");
const data = await response.json();
console.log("Nuevos mensajes:", data);
}, 5000);
// Nota: usa la API Fetch del navegador.
Problema: hay mucho tiempo muerto, incluso si no hay mensajes nuevos. Referencias: JavaScript, Fetch API.
const socket = new WebSocket("ws://localhost:8080");
// Evento cuando llega un mensaje
socket.onmessage = (event) => {
console.log("Nuevo mensaje en tiempo real:", event.data);
};
Ventaja: los mensajes llegan al instante, sin esperar consultas periódicas. Más sobre la API: WebSocket (MDN).
Característica | HTTP tradicional | WebSockets |
---|---|---|
Tipo de comunicación | Request → Response (unidireccional) | Full‑dúplex (bidireccional) |
Persistencia | No; cada petición abre/cierra | Sí; conexión abierta permanente |
Latencia | Alta (depende de polling) | Baja (mensajes instantáneos) |
Eficiencia | Menos eficiente (cabeceras por request) | Mayor eficiencia (frames ligeros) |
Casos de uso | Navegación, APIs REST, descargas | Chats, juegos, notificaciones, IoT |
HTTP sigue siendo ideal para consultas y transferencias estáticas o puntuales. WebSockets brillan cuando se necesita comunicación continua y en tiempo real. Ambos se complementan: HTTP para APIs y carga inicial; WebSockets para la interactividad en vivo.