Short Polling es una técnica de comunicación cliente-servidor en la que el cliente envía solicitudes HTTP a intervalos fijos para recibir datos actualizados. El servidor procesa cada solicitud de inmediato, devolviendo el estado actual incluso si no ha habido cambios. Según Amazon Web Services, 2024, Short Polling es el método de sondeo más simple de implementar pero el menos eficiente, generando una carga excesiva en el servidor y la red.
Puntos clave
Short Polling es un patrón de comunicación en el que el cliente envía periódicamente solicitudes HTTP al servidor con un intervalo predefinido, y el servidor procesa cada solicitud de forma síncrona y devuelve el resultado inmediatamente. El intervalo de sondeo se establece en el lado del cliente mediante temporizadores y suele oscilar entre 1 y 60 segundos según los requisitos de actualización de los datos.
Short Polling es cronológicamente el primer mecanismo para organizar la comunicación en tiempo real en aplicaciones web. A principios de la década de 2000, antes de la segunda generación de XMLHttpRequest, las páginas web usaban <meta http-equiv="refresh"> o la recarga periódica de iframes para actualizar el contenido. Con la llegada de la tecnología AJAX (Asynchronous JavaScript and XML) en 2005, Short Polling se convirtió en el enfoque estándar para actualizar datos sin recargar completamente la página.
La arquitectura de Short Polling incluye tres componentes: un temporizador del cliente, una solicitud HTTP y un manejador del servidor. El cliente inicia un temporizador de intervalo, y cada vez que se activa, se envía una solicitud GET al servidor. El servidor consulta una base de datos u otra fuente, forma una respuesta y la devuelve inmediatamente al cliente. El cliente actualiza la interfaz y espera la siguiente activación del temporizador. Este ciclo se repite indefinidamente mientras la aplicación está activa.
El principal problema de Short Polling son las inevitables solicitudes vacías. Si los datos cambian con poca frecuencia, la mayoría de las solicitudes devuelven un resultado "sin cambios", desperdiciando ancho de banda de red y tiempo de CPU en el procesamiento. Con 10 000 clientes con un intervalo de sondeo de 5 segundos, el servidor recibe 2 000 solicitudes por segundo, una parte significativa de las cuales es inútil si la frecuencia de actualización es de 1 evento por minuto.
Short Polling funciona en un ciclo simple: el cliente establece un temporizador de intervalo con un período determinado (por ejemplo, 5000 ms). En cada activación del temporizador, el cliente forma una solicitud HTTP GET al endpoint del servidor, generalmente con un parámetro de marca de tiempo de la última actualización. El servidor recibe la solicitud, verifica si hay nuevos datos después de la marca de tiempo especificada y devuelve una respuesta, ya sea con nuevos datos o con un indicador de que no hay actualizaciones.
Un parámetro crítico de configuración de Short Polling es el intervalo de sondeo. Un intervalo demasiado corto (menos de 3 segundos) crea una alta carga en el servidor y la red. Un intervalo demasiado largo (más de 30 segundos) reduce la actualidad de los datos. El intervalo óptimo depende del escenario: para paneles de monitoreo — 5–15 segundos, para fuentes de noticias — 30–60 segundos, para alertas críticas — 1–3 segundos. La elección del intervalo es siempre un compromiso entre la actualidad de los datos y la carga de la infraestructura.
Para reducir la carga durante la inactividad, se utiliza un intervalo adaptativo: si varias solicitudes consecutivas devuelven un resultado vacío, el intervalo aumenta (por ejemplo, de 5 a 15 segundos). Cuando aparecen nuevos datos, el intervalo se restablece al valor mínimo. El algoritmo de retroceso exponencial (exponential backoff) permite reducir la cantidad de solicitudes vacías en 3–5 veces durante actualizaciones poco frecuentes.
Veamos una implementación de Short Polling del lado del cliente usando setInterval y Fetch API. La función recibe la URL del endpoint y el intervalo de sondeo en milisegundos.
function startPolling(url, intervalMs) {
const lastTimestamp = new Date().toISOString();
const timerId = setInterval(async () => {
try {
const params = new URLSearchParams({
since: lastTimestamp
});
const response = await fetch(url + "?" + params);
const data = await response.json();
if (data.updates && data.updates.length > 0) {
renderUpdates(data.updates);
console.log("Recibido", data.updates.length, "updates");
}
} catch (error) {
console.error("Error de sondeo:", error);
}
}, intervalMs);
return timerId;
}
const timer = startPolling("/api/updates", 5000);
// clearInterval(timer) para detener
El código crea un intervalo de sondeo de 5 segundos y pasa la marca de tiempo de la última actualización al servidor. El servidor puede usar este parámetro para filtrar datos y devolver solo los nuevos registros, reduciendo la cantidad de información transmitida. La función devuelve el identificador del temporizador para poder detener el sondeo.
La implementación del lado del servidor para Short Polling es extremadamente simple: es un endpoint REST normal que acepta solicitudes GET y devuelve una respuesta JSON con el estado actual o los datos modificados después de la marca de tiempo especificada.
const express = require("express");
const app = express();
let items = [];
app.get("/api/updates", (req, res) => {
const since = req.query.since;
const filtered = items.filter(item => item.timestamp > since);
res.json({ updates: filtered });
});
app.listen(3000);
El servidor recibe el parámetro since y filtra los registros cuya marca de tiempo supera el valor especificado. Este enfoque minimiza la cantidad de datos en cada respuesta, devolviendo solo cambios incrementales. Cuando no hay nuevos datos, el servidor devuelve un array vacío y el cliente continúa el sondeo según lo programado.
Short Polling y Long Polling resuelven el mismo problema — la entrega de datos del servidor al cliente — pero difieren drásticamente en eficiencia. Short Polling utiliza un intervalo fijo de solicitudes, creando una carga predecible, mientras que Long Polling mantiene la conexión abierta hasta que ocurre un evento, minimizando la cantidad de respuestas vacías.
| Criterio | Short Polling | Long Polling |
|---|---|---|
| Complejidad de implementación | Baja, REST estándar | Media, procesamiento asíncrono |
| Latencia de actualizaciones | Fija, hasta N segundos | Mínima, al ocurrir el evento |
| Cantidad de solicitudes | Constante, N solicitudes por minuto | Por eventos, generalmente mucho menor |
| Carga en el servidor | Alta con intervalo corto | Mantenimiento de conexiones, procesamiento asíncrono |
| Tráfico en inactividad | Máximo, cada solicitud con encabezados | Mínimo, una conexión abierta |
| Escalabilidad | Simple, solicitudes sin estado | Compleja, requiere cola de eventos compartida |
La elección entre técnicas depende de la frecuencia de actualizaciones de los datos. Si los eventos ocurren más de una vez cada 10 segundos, ambos enfoques generan una carga comparable y Short Polling puede resultar más simple. Si los eventos son raros (horas o minutos entre cambios), Long Polling es preferible porque no crea solicitudes vacías. Para escenarios intermedios, la elección depende de las limitaciones de infraestructura y la posibilidad de usar WebSocket.
Short Polling se aplica en escenarios donde los requisitos de actualidad de los datos son bajos y la simplicidad de implementación tiene prioridad sobre la eficiencia. Los casos más típicos son paneles administrativos internos, sistemas de monitoreo con baja frecuencia de alertas y aplicaciones donde un retraso de 15–30 segundos es aceptable.
Limitación importante — Short Polling no es adecuado para aplicaciones críticas en el tiempo (terminales de trading, sistemas de alerta de emergencia) donde incluso un retraso de 1 segundo es inaceptable. En tales escenarios, es necesario usar WebSocket, Server-Sent Events o Long Polling. Al diseñar un sistema con Short Polling, se debe calcular el presupuesto de solicitudes: con 1 000 clientes con un intervalo de 5 segundos, el servidor procesa 12 000 solicitudes por minuto, lo que requiere una base de recursos correspondiente.
Preguntas frecuentes
Short Polling es cuando una aplicación pregunta al servidor cada N segundos: "¿hay nuevos datos?", y el servidor siempre responde, incluso si nada ha cambiado. Es como ir al buzón cada 5 minutos para ver si ha llegado correo nuevo.
El intervalo óptimo de Short Polling depende del escenario: 5–10 segundos para paneles de monitoreo, 15–30 segundos para fuentes de noticias, 30–60 segundos para páginas de estado. El intervalo debe ser un compromiso entre la actualidad de los datos y la carga del servidor. Comience con 10 segundos y ajuste según los resultados de las pruebas.
Short Polling — el cliente "consulta" constantemente al servidor con un intervalo fijo. Long Polling — el cliente hace una solicitud y el servidor la mantiene abierta hasta que aparecen datos. Short Polling es más simple de implementar pero crea más solicitudes vacías durante actualizaciones poco frecuentes.
Short Polling es más simple de implementar que WebSocket y no requiere un protocolo especial — funciona mediante solicitudes HTTP normales. Short Polling está justificado para sistemas internos simples donde un retraso de 10–30 segundos es aceptable y los costos de infraestructura para soportar WebSocket no están justificados.
Use un intervalo adaptativo: cuando no haya actualizaciones, aumente la pausa entre solicitudes en 2–3 veces. Agregue el parámetro since con la marca de tiempo de la última solicitud para que el servidor devuelva solo cambios incrementales. Almacene en caché las respuestas en el CDN o servidor proxy para reducir la carga en el backend.
Resumen
setInterval o setTimeout recursivo con intervalo constante o adaptativo.Desarrollaremos una aplicación móvil llave en mano
IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.
Lea también