Short Polling — je technika interakce klienta a serveru, při které klient odesílá HTTP požadavky v pevných časových intervalech pro získání aktualizovaných dat. Server zpracuje každý požadavek okamžitě a vrátí aktuální stav, i když nedošlo k žádným změnám. Podle Amazon Web Services, 2024 je Short Polling nejsnazší na implementaci, ale nejméně efektivní metoda dotazování, která vytváří nadměrné zatížení serveru a sítě.
Hlavní body
Short Polling — je komunikační vzor, při kterém klient periodicky odesílá HTTP požadavky na server s předem nastaveným intervalem a server zpracovává každý požadavek synchronně a okamžitě vrátí výsledek. Interval dotazování se nastavuje na straně klienta pomocí časovačů a obvykle se pohybuje od 1 do 60 sekund v závislosti na požadavcích na aktuálnost dat.
Short Polling je chronologicky první mechanismus organizace reálného času ve webových aplikacích. Na počátku 21. století, před příchodem XMLHttpRequest druhé generace, webové stránky používaly <meta http-equiv=”refresh”> nebo periodické znovunačítání iframů pro aktualizaci obsahu. S příchodem technologie AJAX (Asynchronous JavaScript and XML) v roce 2005 se Short Polling stal standardním přístupem pro aktualizaci dat bez úplného znovunačtení stránky.
Architektura Short Polling zahrnuje tř9i komponenty: časovač klienta, HTTP požadavek a obslužný program serveru. Klient spustí intervalový časovač, při jehož aktivaci se odešle GET požadavek na server. Server provede dotaz do databáze nebo jiného zdroje, vytvoří odpověď a okamžitě ji vrátí klientovi. Klient aktualizuje rozhraní a čeká na další aktivaci časovače. Tento cyklus se nekonečně opakuje, dokud je aplikace aktivní.
Hlavní problém Short Polling — nevyhnutelné prázdné požadavky. Pokud se data mění zřídka, většina požadavků vrátí výsledek „bez změn“, čímž plýtvá šířkou pásma sítě a časem procesoru na zpracování. Při 10 000 klientech s intervalem dotazování 5 sekund server přijímá 2 000 požadavků za sekundu — značná část z nich je zbytečná, pokud je frekvence aktualizací 1 událost za minutu.
Short Polling funguje podle jednoduchého cyklu: klient nastaví intervalový časovač s určitou periodou (např. 5000 ms). Při každé aktivaci časovače klient vytvoří HTTP GET požadavek na serverový endpoint, obvykle s parametrem časového razítka poslední aktualizace. Server obdrží požadavek, zkontroluje přítomnost nových dat po uvedeném razítku a vrátí odpověď — buď s novými daty, nebo s indikátorem absence aktualizací.
Kritický parametr konfigurace Short Polling — interval dotazování. Příliš krátký interval (méně než 3 sekundy) vytváří vysoké zatížení serveru a sítě. Příliš dlouhý interval (více než 30 sekund) snižuje aktuálnost dat. Optimální interval závisí na scénáři: pro monitorovací panely — 5–15 sekund, pro zpravodajské kanály — 30–60 sekund, pro kritické alarmy — 1–3 sekundy. Výběr intervalu je vždy kompromisem mezi aktuálností dat a zatížením infrastruktury.
Pro snížení zatížení při nečinnosti se používá adaptivní interval: pokud několik po sobě jdoucích požadavků vrátí prázdný výsledek, interval se zvýší (např. z 5 na 15 sekund). Když se objeví nová data, interval se resetuje na minimální hodnotu. Algoritmus exponenciálního zpoždění (exponential backoff) umožňuje snížit počet prázdných požadavků 3–5krát při vzácných aktualizacích.
Podívejme se na klientskou implementaci Short Polling pomocí setInterval a Fetch API. Funkce přijímá URL endpointu a interval dotazování v milisekundách.
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("Přijato", data.updates.length, "updates");
}
} catch (error) {
console.error("Polling selhal:", error);
}
}, intervalMs);
return timerId;
}
const timer = startPolling("/api/updates", 5000);
// clearInterval(timer) pro zastavení
Kód vytváří interval dotazování s periodou 5 sekund a předává serveru časové razítko poslední aktualizace. Server může tento parametr použít pro filtrování dat a vracení pouze nových záznamů, čímž se sníží objem přenášených informací. Funkce vrací identifikátor časovače pro možnost zastavení dotazování.
Serverová implementace pro Short Polling je mimořádně jednoduchá — je to běžný REST endpoint, který přijímá GET požadavky a vrací JSON odpověď s aktuálním stavem nebo daty změněnými po uvedeném razítku.
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);
Server obdrží parametr since a filtruje záznamy, jejichž časové razítko přesahuje uvedenou hodnotu. Tento přístup minimalizuje objem dat v každé odpovědi, když vrací pouze inkrementální změny. Při absenci nových dat server vrátí prázdné pole a klient pokračuje v dotazování podle plánu.
Short Polling a Long Polling řeší stejný úkol — doručení dat ze serveru — ale radikálně se liší účinností. Short Polling používá pevný interval požadavků, čímž vytváří předvídatelné zatížení, zatímco Long Polling udržuje spojení až do výskytu události, čímž minimalizuje počet prázdných odpovědí.
| Kritérium | Short Polling | Long Polling |
|---|---|---|
| Složitost implementace | Nízká, standardní REST | Střední, asynchronní zpracování |
| Zpoždění aktualizací | Fixní, až N sekund | Minimální, při výskytu události |
| Počet požadavků | Konstantní, N požadavků za minutu | Podle událostí, obvykle mnohem méně |
| Zatížení serveru | Vysoké při malém intervalu | Udržování spojení, asynchronní zpracování |
| Provoz při nečinnosti | Maximální, každý požadavek s hlavičkami | Minimální, jedno otevřené spojení |
| Škálování | Jednoduché, bezstavové požadavky | Složité, vyžaduje sdílenou frontu událostí |
Volba mezi technikami závisí na frekvenci aktualizací dat. Pokud se události dějí častěji než jednou za 10 sekund — oba přístupy poskytují srovnatelné zatížení a Short Polling může být jednodušší. Pokud jsou události vzácné (hodiny nebo minuty mezi změnami) — Long Polling je výhodnější, protože nevytváří prázdné požadavky. Pro přechodné scénáře závisí volba na infrastrukturních omezeních a možnosti použít WebSocket.
Short Polling se používá ve scénářích, kde jsou požadavky na aktuálnost dat nízké a jednoduchost implementace má přednost před efektivitou. Nejtypičtějšími případy jsou interní administrativní panely, monitorovací systémy s nízkou frekvencí alertů a aplikace, kde je zpoždění 15–30 sekund přijatelné.
Důležité omezení — Short Polling není vhodný pro časově kritické aplikace (obchodní terminály, systémy nouzového varování), kde je zpoždění i 1 sekundy nepřijatelné. V takových scénářích je třeba použít WebSocket, Server-Sent Events nebo Long Polling. Při navrhování systému se Short Pollingem je třeba vypočítat rozpočet požadavků: při 1 000 klientech s intervalem 5 sekund server zpracovává 12 000 požadavků za minutu, což vyžaduje odpovídající základnu zdrojů.
Často kladené otázky
Short Polling — je situace, kdy aplikace každých N sekund ptá serveru: „jsou nová data?“, a server pokaždé odpoví, i když se nic nezměnilo. Je to jako chodit ke schránce každých 5 minut, abyste zjistili, zda přišel nový dopis.
Optimální Short Polling interval závisí na scénáři: 5–10 sekund pro monitorovací panely, 15–30 sekund pro zpravodajské kanály, 30–60 sekund pro stránky stavu. Interval by měl být kompromisem mezi aktuálností dat a zatížením serveru. Začněte s 10 sekundami a upravujte na základě výsledků testování.
Short Polling — klient neustále „škubá“ serverem s pevným intervalem. Long Polling — klient odešle jeden požadavek a server jej drží otevřený, dokud se neobjeví data. Short Polling je jednodušší na implementaci, ale vytváří více prázdných požadavků při vzácných aktualizacích.
Short Polling je jednodušší na implementaci než WebSocket a nevyžaduje speciální protokol — funguje prostřednictvím běžných HTTP požadavků. Short Polling je ospravedlnitelný pro jednoduché interní systémy, kde je zpoždění 10–30 sekund přijatelné a infrastrukturní náklady na údržbu WebSocket nejsou ospravedlnitelné.
Použijte adaptivní interval: při absenci aktualizací zvyšte páuzu mezi požadavky 2–3krát. Přidejte parametr since s časovým razítkem posledního požadavku, aby server vracel pouze inkrementální změny. Ukládejte odpovědi do mezipaměti na straně CDN nebo proxy serveru pro snížení zatížení backendu.
Shrnutí
setInterval nebo rekurzivního setTimeout s konstantním nebo adaptivním intervalem.Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.
Přečtěte si také