Long-Polling, WebSockets, SSE y Comet: Análisis completo con código en PHP

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

¿Todavía actualizas la página manualmente? Es hora de pasar al tiempo real

\n\n

Imagina: abriste una bolsa en línea y el tipo de cambio del dólar está completamente congelado. Presionas F5, presionas de nuevo, y no cambia. ¿Te suena familiar? Ahora imagina que el tipo de cambio se actualiza solo, como en el cine, de forma fluida y sin demoras. Esto no es magia, son tecnologías en tiempo real. Son ellas las que transforman un sitio web estático en un organismo vivo: chats, notificaciones, paneles de control con actualización en tiempo real.

\n\n

Hoy analizaremos los cuatro pilares sobre los que se sostiene toda la web en tiempo real: Long-Polling, WebSockets, Server-Sent Events (SSE) y Comet. Te mostraré cómo funcionan «bajo el capó» y te daré código listo en PHP que podrás usar ahora mismo. ¡Allá vamos!

\n\n

Artículo escrito para el portal educativo pythonlib.ru — aquí convertimos conceptos complejos en herramientas comprensibles.

\n\n

Brevemente sobre lo principal: ¿qué se esconde detrás de los términos?

\n\n

Cuando abres una página normal, el navegador hace una solicitud, el servidor responde y la conexión se cierra. Todo es simple. Pero, ¿qué pasa si el servidor quiere «llamar» por sí mismo con nuevos datos? Aquí es donde empiezan los bailes con pandereta.

\n\n
    \n
  • Long-Polling (Consulta larga) — el abuelo viejo pero confiable. El cliente «cuelga» del servidor y espera a que este se digne a responder.
  • \n
  • WebSockets — la tendencia de los últimos años. Un canal bidireccional completo, como una línea telefónica.
  • \n
  • Server-Sent Events (SSE) — transmisión unidireccional del servidor al cliente. Ideal para feeds de noticias y cotizaciones.
  • \n
  • Comet — nombre general para técnicas donde el servidor «empuja» datos al cliente sin una solicitud adicional. Long-Polling y SSE son casos particulares de Comet.
  • \n
\n\n

Tecnología n.º 1: Long-Polling — el abuelo del tiempo real

\n\n

Long-Polling es cuando el cliente le dice al servidor: «Esperaré todo lo que sea necesario, solo responde cuando aparezcan datos». El cliente abre una conexión y la mantiene abierta hasta que el servidor envía una respuesta. Después de recibir la respuesta, el cliente crea inmediatamente una nueva solicitud. Se forma una cadena interminable.

\n\n

Ventajas: funciona en cualquier hosting, no requiere bibliotecas adicionales, es compatible con todos los navegadores.

\n

Desventajas: muchos encabezados innecesarios, carga en el servidor, retrasos con una gran cantidad de clientes.

\n\n

Ejemplo en PHP (Long-Polling)

\n\n
<?php\n// long_polling.php\nheader('Content-Type: text/plain; charset=utf-8');\nheader('Cache-Control: no-cache');\n\n$timeout = 30; // esperamos máximo 30 segundos\n$start = time();\n\n// Emulamos la aparición de nuevos datos\n$data = getNewDataFromDB(); // tu función para obtener datos\n\nwhile (empty($data)) {\n    if ((time() - $start) > $timeout) {\n        echo json_encode(['status' => 'timeout', 'data' => null]);\n        flush();\n        exit;\n    }\n    usleep(500000); // dormimos 0.5 segundos\n    $data = getNewDataFromDB();\n}\n\necho json_encode(['status' => 'ok', 'data' => $data]);\nflush();\n?>
\n\n

En el cliente (JavaScript) se verá así:

\n\n
function longPoll() {\n    fetch('/long_polling.php')\n        .then(response => response.json())\n        .then(data => {\n            if (data.status === 'ok') {\n                console.log('Nuevos datos:', data.data);\n                // actualizamos la interfaz\n            }\n            longPoll(); // creamos inmediatamente una nueva solicitud\n        })\n        .catch(error => {\n            console.error('Error:', error);\n            setTimeout(longPoll, 1000); // reconectamos después de un segundo\n        });\n}\nlongPoll();
\n\n

¿Ves? El cliente se cuelga, espera, recibe datos y vuelve a colgarse. Esto es Long-Polling en PHP en su forma más pura.

\n\n

Tecnología n.º 2: WebSockets — la autopista bidireccional

\n\n

WebSockets

Blogs

Book Recommendations