Short Polling — ügyfél-szerver interakciós technika, melynek során az ügyfél fix időközönként HTTP-kéréseket küld a frissített adatok lekéréséhez. A szerver minden kérést azonnal feldolgoz, és visszaadja az aktuális állapotot, még akkor is, ha nincs változás. A Amazon Web Services, 2024 szerint a Short Polling a legegyszerűbben megvalósítható, de a legkevésbé hatékony lekérdezési módszer, amely túlzott terhelést okoz a szerveren és a hálózaton.
Fő pontok
Short Polling — olyan kommunikációs minta, amelyben az ügyfél időszakosan HTTP-kéréseket küld a szervernek előre meghatározott időközönként, a szerver pedig minden kérést szinkron módon dolgoz fel, és azonnal visszaadja az eredményt. A lekérdezési időközt az ügyfél oldalon állítják be időzítők segítségével, és általában 1 és 60 másodperc között van, az adatok aktualitására vonatkozó követelményektől függően.
A Short Polling kronológiailag az első mechanizmus a valós idejű működés megszervezésére webes alkalmazásokban. A 2000-es évek elején, a második generációs XMLHttpRequest megjelenése előtt, a weboldalak <meta http-equiv=”refresh”> vagy az iframe-ek időszakos újratöltését használták a tartalom frissítéséhez. Az AJAX (Asynchronous JavaScript and XML) technológia 2005-ös megjelenésével a Short Polling a szabványos megközelítéssé vált az adatok frissítésére a lap teljes újratöltése nélkül.
A Short Polling architektúrája három összetevőből áll: ügyfél időzítőből, HTTP-kérésből és szerver-kezelőből. Az ügyfél elindít egy intervallum-időzítőt, melynek élesztésekor egy GET-kérés kerül elküldésre a szervernek. A szerver lekérdezést hajt végre az adatbázisban vagy más forrásban, választ képez, és azonnal visszaküldi az ügyfélnek. Az ügyfél frissíti a felületet és vár a következő időzítő élesztésre. Ez a ciklus végtelenül ismétlődik, amíg az alkalmazás aktív.
A Short Polling fő problémája — az elkerülhetetlen üres kérések. Ha az adatok ritkán változnak, a kérések többsége „nincs változás” eredményt ad vissza, pazarolva a hálózati sávszélességet és a processzoridőt a feldolgozásra. 10 000 ügyfél és 5 másodperces lekérdezési időköz esetén a szerver másodpercenként 2 000 kérést kap — amelyek jelentős része haszontalan, ha a frissítések gyakorisága 1 esemény percenként.
Short Polling egy egyszerű ciklus szerint működik: az ügyfél beállít egy intervallum-időzítőt meghatározott periódussal (pl. 5000 ms). Minden időzítő élesztéskor az ügyfél HTTP GET kérést küld a szerver végpontjára, általában az utolsó frissítés időbélyegének paraméterével. A szerver megkapja a kérést, ellenőrzi új adatok meglétét a megadott időbélyeg után, és választ ad — akár új adatokkal, akár a frissítések hiányának jelzésével.
A Short Polling kritikus konfigurációs paramétere — a lekérdezési időköz. A túl rövid időköz (3 másodperc alatt) magas terhelést okoz a szerveren és a hálózaton. A túl hosszú időköz (30 másodperc felett) csökkenti az adatok aktualitását. Az optimális időköz a forgatókönyvtől függ: monitorozási panelekhez — 5–15 másodperc, hírcsatornákhoz — 30–60 másodperc, kritikus riasztásokhoz — 1–3 másodperc. Az időköz választása mindig kompromisszum az adatok aktualitása és az infrastruktúra terhelése között.
A terhelés csökkentéséhez inaktivitás idején adaptív időközt használnak: ha több egymást követő kérés üres eredményt ad, az időköz megnő (pl. 5-ről 15 másodpercre). Új adatok megjelenésekor az időköz visszaállítódik a minimális értékre. Az exponenciális késleltetési algoritmus (exponential backoff) lehetővé teszi az üres kérések számának 3–5-szörös csökkentését ritka frissítések esetén.
Nézzük meg a Short Polling ügyfél oldali megvalósítását a setInterval és a Fetch API használatával. A függvény elfogadja a végponc URL-jét és a lekérdezési időközt ezredmásodpercben.
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("Fogadva", data.updates.length, "updates");
}
} catch (error) {
console.error("A lekérdezés sikertelen:", error);
}
}, intervalMs);
return timerId;
}
const timer = startPolling("/api/updates", 5000);
// clearInterval(timer) a leállításhoz
A kód létrehoz egy lekérdezési időközt 5 másodperces periódussal, és elküldi a szervernek az utolsó frissítés időbélyegét. A szerver ezt a paramétert használhatja az adatok szűrésére és csak az új rekordok visszaküldésére, csökkentve a továbbított információ mennyiségét. A függvény visszaadja az időzítő azonosítót a lekérdezés leállításának lehetőségéhez.
A Short Polling szerver oldali megvalósítása rendkívül egyszerű — ez egy szokásos REST-végpont, amely GET kéréseket fogad és JSON választ ad vissza az aktuális állapottal vagy a megadott időbélyeg után módosított adatokkal.
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);
A szerver megkapja a since paramétert, és szűri azokat a rekordokat, amelyek időbélyege meghaladja a megadott értéket. Ez a megközelítés minimalizálja az adatok mennyiségét minden válaszban, csak növekményes változásokat visszaküldve. Új adatok hiányában a szerver üres tömböt ad vissza, az ügyfél pedig folytatja a lekérdezést az ütemezés szerint.
Short Polling és a Long Polling ugyanazt a feladatot oldja meg — adatok kiszolgálása a szerverről — de radikálisan különböznek a hatékonyságban. A Short Polling fix kérésidőközt használ, kiszámítható terhelést hozva létre, míg a Long Polling az esemény bekövetkeztéig tartja a kapcsolatot, minimalizálva az üres válaszok számát.
| Szempont | Short Polling | Long Polling |
|---|---|---|
| Megvalósítás bonyolultsága | Alacsony, szabványos REST | Közepes, aszinkron feldolgozás |
| Frissítés késleltetése | Fix, N másodpercig | Minimális, esemény bekövetkeztekor |
| Kérések száma | Állandó, N kérés percenként | Eseményenként, általában sokkal kevesebb |
| Szerverterhelés | Magas kis időköz esetén | Kapcsolatok tartása, aszinkron feldolgozás |
| Forgalom inaktivitáskor | Maximális, minden kérés fejlécekkel | Minimális, egy nyitott kapcsolat |
| Skálázhatóság | Egyszerű, állapotmentes kérések | Összetett, közös eseménysor szükséges |
A technikák közötti választás az adatok frissítési gyakoriságától függ. Ha az események gyakrabban történnek, mint 10 másodpercenként — mindkét megközelítés összehasonlítható terhelést ad, és a Short Polling egyszerűbb lehet. Ha az események ritkák (órák vagy percek telnek el a változások között) — a Long Polling előnyösebb, mert nem hoz létre üres kéréseket. Köztes forgatókönyvek esetén a választás az infrastrukturális korlátoktól és a WebSocket használatának lehetőségétől függ.
Short Polling olyan forgatókönyvekben alkalmazzák, ahol az adatok aktualitására vonatkozó követelmények alacsonyak, és a megvalósítás egyszerűsége elsőbbséget élvez a hatékonysággal szemben. A legjellemzőbb esetek a belső adminisztratív panelek, az alacsony riasztási gyakoriságú monitorozórendszerek és azok az alkalmazások, ahol a 15–30 másodperces késleltetés elfogadható.
Fontos korlátozás — a Short Polling nem alkalmas időkritikus alkalmazásokhoz (kereskedelmi terminálok, vészhelyzeti riasztórendszerek), ahol akár 1 másodperces késleltetés is elfogadhatatlan. Ilyen forgatókönyvekben WebSocketet, Server-Sent Events vagy Long Pollingot kell használni. A Short Pollinggal való rendszer tervezésekor ki kell számítani a kéréskeretet: 1 000 ügyfél és 5 másodperces időköz esetén a szerver percenként 12 000 kérést dolgoz fel, ami megfelelő erőforrásbázist igényel.
Gyakran ismételt kérdések
Short Polling — amikor az alkalmazás N másodpercenként megkérdezi a szervert: „vannak új adatok?”, és a szerver minden alkalommal válaszol, még ha semmi sem változott. Ez olyan, mintha 5 percenként a postaládához menne ellenőrizni, érkezett-e új levél.
Az optimális Short Polling időköz a forgatókönyvtől függ: 5–10 másodperc monitorozási panelekhez, 15–30 másodperc hírcsatornákhoz, 30–60 másodperc állapotoldalakhoz. Az időköznek kompromisszumnak kell lennie az adatok aktualitása és a szerverterhelés között. Kezdje 10 másodperccel, és állítsa be a tesztelési eredmények alapján.
Short Polling — az ügyfél folyamatosan „húzza” a szervert fix időközzel. Long Polling — az ügyfél egy kérést küld, és a szerver nyitva tartja azt, amíg adatok meg nem jelennek. A Short Polling egyszerűbb megvalósítani, de több üres kérést hoz létre ritka frissítések esetén.
Short Polling egyszerűbb megvalósítani, mint a WebSocketet, és nem igényel különleges protokollt — szokásos HTTP-kéréseken keresztül működik. A Short Polling egyszerű belső rendszerekben indokolt, ahol a 10–30 másodperces késleltetés elfogadható, és a WebSocket fenntartásának infrastrukturális költségei indokolatlanok.
Használjon adaptív időközt: frissítések hiányában növelje a kérések közötti szünetet 2–3-szorosa. Adja hozzá a since paramétert az utolsó kérés időbélyegével, hogy a szerver csak növekményes változásokat küldjön vissza. Győrűzze a válaszokat a CDN vagy proxyszerver oldalán a backend terhelésének csökkentéséhez.
Összefoglalás
setInterval vagy rekurzív setTimeout segítségével, állandó vagy adaptív időközzel.Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is