¿Todavía actualizas la página manualmente? Es hora de pasar al tiempo real
\n\nImagina: 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\nHoy 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\nArtículo escrito para el portal educativo pythonlib.ru — aquí convertimos conceptos complejos en herramientas comprensibles.
\n\nBrevemente sobre lo principal: ¿qué se esconde detrás de los términos?
\n\nCuando 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
Tecnología n.º 1: Long-Polling — el abuelo del tiempo real
\n\nLong-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\nVentajas: funciona en cualquier hosting, no requiere bibliotecas adicionales, es compatible con todos los navegadores.
\nDesventajas: muchos encabezados innecesarios, carga en el servidor, retrasos con una gran cantidad de clientes.
\n\nEjemplo 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\nEn el cliente (JavaScript) se verá así:
\n\nfunction 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\nTecnología n.º 2: WebSockets — la autopista bidireccional
\n\nWebSockets