Long Polling: mi ez, hogyan működik és hol használják

Szerző: IT Sectr Megjelenés: 2026-06-02 Olvasási idő: 8 perc

Long Polling egy kliens-szerver interakciós technika, amelynél a szerver addig tartja nyitva a HTTP-kérést, amíg új adatok meg nem jelennek vagy a timeout le nem jár. Az időszakos lekérdezéssel ellentétben a szerver nem küld azonnal üres választ, hanem megvárja egy esemény bekövetkeztét, hogy adatokat küldjön a kliensnek. A MDN Web Docs, 2024 szerint a Long Polling továbbra is keresett megoldás a valós idejű alkalmazások számára, ahol a WebSocket nem elérhető vagy felesleges.

Főbb pontok

  • Long Polling — technika, ahol a szerver addig tartja a HTTP-kérést, amíg adat meg nem jelenik, és csak azután küld választ a kliensnek.
  • Mechanizmus hosszú HTTP-kapcsolatokon alapul: a kliens kérést küld, a szerver nem válaszol azonnal, hanem eseményt vagy timeoutot vár.
  • Különbség a Short Pollingtól, hogy a szerver kezdeményezi az adatküldést, a kliens pedig nem időzítővel kérdezi le a szervert.
  • Alkalmazás magában foglal chat-eket, értesítéseket, aktivitási hírfolyamokat és valós idejű monitorozó rendszereket.
  • Korlátozás — magas szerverterhelés nagyszámú egyidejű kapcsolat esetén a nyitott kérések tartása miatt.

Mi az a Long Polling

Long Polling egy interakciós minta a kliens-szerver architektúrában, ahol a kliens HTTP-kérést indít, a szerver pedig késlelteti a válasz küldését addig, amíg új adatok meg nem jelennek vagy egy meghatározott timeout le nem jár. A válasz kézhezvétele után a kliens azonnal elküldi a következő kérést, létrehozva a folyamatos kapcsolat hatását.

A Long Polling technika a Short Polling evolúciós fejlődéseként jelent meg az üres HTTP-kérések számának csökkentésére. A hagyományos lekérdezésnél a kliens minden N másodpercben kéréseket küld, és a szerver válaszol még új adatok hiányában is. A Long Pollingnál a szerver egy kapcsolat tartó mechanizmust használ, ami radikálisan csökkenti a haszontalan forgalom mennyiségét.

A Long Polling kialakulásának története

A WebSocket 2011-es megjelenése előtt a Long Polling volt a valós idejű szervezés fő módja a weben. Olyan cégek, mint a Facebook és a Gmail, ezt a technikát használták chatekhez és értesítésekhez a 2010-es évek elején. A High Performance Browser Networking (Grigorik, 2013) kutatás szerint a Long Polling az akkori nagy webes alkalmazásokban a valós idejű kapcsolatok akár 95%-át is feldolgozta.

A Long Polling alapelve

A kliens szabványos HTTP-kérést küld a szervernek. A szerver a kérés kézhezvétele után nem küld azonnal választ — várakozási sorba helyezi a kérést. Amikor a szerveren esemény történik (új üzenet, adatváltozás), a szerver választ képez és elküldi a kliensnek. A kliens a válasz kézhezvétele után azonnal új Long Polling kérést hoz létre, és a ciklus megismétlődik.

Hogyan működik a Long Polling

Long Polling a következő lépéssorozat szerint működik. A kliens HTTP GET kérést küld a szerver végpontjára. A szerver a kérés kézhezvétele után ellenőrzi az új adatok elérhetőségét az eseménysorban. Ha nincs adat, a szerver várakozó állapotban tartja a kérést, nem küld azonnal választ. A tartási mechanizmus a szerver implementációjától függ — leggyakrabban aszinkron feldolgozást használnak callbackekkel vagy eseményvezérelt architektúrát.

Amikor a szerver oldalán esemény történik (például a felhasználó üzenetet küldött a chatben), a szerver HTTP-választ képez az adatokat tartalmazó törzzsel és befejezi a kapcsolatot. A kliens megkapja a választ, feldolgozza az adatokat, és azonnal új kérést indít. Ha a várakozás ideje alatt nem jelentek meg adatok, a szerver a timeout lejárta után üres választ küld, és a kliens szintén újrakapcsolódik. A timeout általában 30-60 másodperc a terhelés és késleltetés közötti egyensúly érdekében.

Időtúllépések és kapcsolatkezelés

A Long Polling konfiguráció kulcsparamétere a várakozási időtúllépés (timeout). Túl rövid timeout (kevesebb mint 10 másodperc) a kérések számának növekedéséhez vezet, közelítve a technikát a Short Pollinghoz. Túl hosszú (több mint 120 másodperc) a kapcsolat megszakadását okozhatja a köztes proxyk és terheléselosztók által. Az ajánlott érték a legtöbb forgatókönyvhöz 30-45 másodperc.

Több esemény kezelése

Ha a szerveren több esemény történt egy Long Polling kérés alatt, a szervernek mindet egy válaszban kell átadnia, vagy eseménysort kell szerveznie a kliens oldalán. Ehhez eseménypufferelést használnak: a szerver összegyűjti a kérés tartása alatt történt eseményeket, és adattömegként adja át őket a válasz törzsében.

Long Polling implementáció példa JavaScriptben

Tekintsünk egy egyszerű Long Polling implementációt a kliens oldalán a modern Fetch API használatával. A kliens függvény kérést küld, és a válasz kézhezvétele után rekurzívan meghívja önmagát.

js
async function longPoll(url) {
    try {
        const response = await fetch(url);
        const data = await response.json();

        handleData(data);
        longPoll(url);
    } catch (error) {
        console.error("Long Polling hiba", error);
        setTimeout(() => longPoll(url), 3000);
    }
}

function handleData(data) {
    if (data.events && data.events.length > 0) {
        data.events.forEach(event => {
            console.log("Új esemény:", event);
        });
    }
}

longPoll("/api/events");

Ez a kód egy végtelen Long Polling ciklust hoz létre: a válasz kézhezvétele után a függvény azonnal új kérést küld. Kapcsolati hiba esetén három másodperces késleltetés kerül beállításra az újrapróbálkozás előtt, hogy elkerülje a szerver lavinaszerű terhelését.

Szerver oldali implementáció Node.js-ben

A szerver oldalán a kérést addig kell tartani, amíg esemény meg nem jelenik vagy a timeout le nem jár. Egy EventEmitter használatával készült implementációs példa Node.js-ben bemutatja ezt a mechanizmust.

js
const express = require("express");
const EventEmitter = require("events");
const app = express();

const eventBus = new EventEmitter();

app.get("/api/events", (req, res) => {
    const timeout = setTimeout(() => {
        res.json({ events: [] });
    }, 30000);

    eventBus.once("new-event", (data) => {
        clearTimeout(timeout);
        res.json({ events: [data] });
    });
});

app.post("/api/events", (req, res) => {
    eventBus.emit("new-event", req.body);
    res.send({ status: "ok" });
});

app.listen(3000);

A szerver rész az EventEmitteret használja a várakozó Long Polling kapcsolatok értesítésére új adatok megjelenésekor. A 30 másodperces timeout elérésekor a szerver egy üres eseménytömböt ad vissza, és a kliens új kérést hoz létre.

Mikor alkalmazzák a Long Pollingot

Long Polling olyan forgatókönyvekben alkalmazzák, ahol valós idejű adatszolgáltatásra van szükség, de a WebSocket használata technikai vagy infrastrukturális okokból lehetetlen. A leggyakoribb esetek — vállalati proxyk és tűzfalak, amelyek blokkolják a WebSocket kapcsolatokat, valamint a szerver oldali korlátozott protokolltámogatással rendelkező környezetek.

  • Chat és üzenetküldők — a Long Polling biztosítja az üzenetek kézbesítését a WebSocket nélkül, HTTP-n keresztül működő üzenetküldők webes verzióiban.
  • Monitorozó panelek — valós idejű rendszerek DevOps metrikákhoz, naplókhoz és riasztásokhoz, ahol az adatok időszerűsége 1-5 másodperces késleltetéssel fontos.
  • Értesítések — értesítések kézbesítése a böngészőben Service Workers és Push API használata nélkül.
  • Aktivitási hírfolyamok — közösségi hálózatok és hírcsatornák automatikus tartalomfrissítéssel új bejegyzések megjelenésekor.
  • Együttműködő munka — Google Docs-szerű szerkesztők a változtatások alapvető szinkronizálásával a felhasználók között.

A Long Polling választásának kulcstényezője a visszafelé kompatibilitás. Minden HTTP kliens és szerver támogatja ezt a módszert, ami univerzális megoldássá teszi a valós idejű működéshez további függőségek nélkül. A HTTP Archive (2024) szerint az összes webhely körülbelül 8%-a továbbra is Long Pollingot használ az alapvető valós idejű funkciókhoz.

Long Polling vs Short Polling

Long Polling és a Short Polling ugyanazt a feladatot oldja meg — adatok szállítását a szervertől a klienshez — de alapvetően különböznek mechanizmusban és hatékonyságban. A Short Polling rögzített lekérdezési intervallumot használ, ahol a kliens HTTP-kéréseket küld egyenlő időközönként, függetlenül attól, hogy jelentek-e meg új adatok a szerveren.

JellemzőLong PollingShort Polling
Válasz kezdeményezéseSzerver adatot küld eseménykorSzerver minden kliens kérésre válaszol
Kézbesítési késleltetésMinimális, akár 1 másodpercLekérdezési intervallumtól függ, 3-60 másodperc
Kérések száma1 kérés eseményenként vagy timeoutonkéntN kérés időegységenként (rögzített)
Forgalom tétlen állapotbanAlacsony (egy nyitott kérés)Magas (kérések minden N másodpercben)
SzerverterhelésKapcsolatok tartásaGyakori kérések feldolgozása
Implementáció összetettségeKözepes (aszinkron feldolgozás)Alacsony (szokásos HTTP-kérések)

Short Polling egyszerűbb implementálni, de jelentősen nagyobb terhelést generál a szerveren és a hálózaton ugyanolyan adatfrissítési gyakoriság mellett. Ha 5 másodpercnél kisebb késleltetés szükséges, a Short Polling több tucat kérést generál percenként, míg a Long Polling egy kérést használ eseményenként vagy timeoutonként. Ritka eseményekkel rendelkező alkalmazásokhoz a Long Polling nagyságrendileg hatékonyabb forgalom szempontjából.

Long Polling vs WebSocket

WebSocket egy teljes értékű kétirányú valós idejű protokoll, amely a kezdeti HTTP kézfogás után TCP felett működik. A Long Pollinggal ellentétben a WebSocket egy állandó kapcsolatot hoz létre, és lehetővé teszi a szerver számára, hogy bármikor adatot küldjön a kliensnek anélkül, hogy új HTTP-kérést hozna létre.

A Long Polling és a WebSocket közötti választás több tényezőtől függ. Kompatibilitás: a Long Polling minden proxy-n és tűzfalon átműködik, a WebSocketet blokkolhatják a vállalati hálózatok. Teljesítmény: a WebSocket kisebb overhead-del rendelkezik (2 bájt keretenként a teljes HTTP fejlécekkel szemben), ami magas üzenetgyakoriságnál kritikus. Skálázhatóság: a Long Polling több erőforrást igényel a szerver oldalán a több kapcsolat tartása miatt, a WebSocket rögzített kapcsolatot használ munkamenetenként.

  • Long Polling — a legjobb választás alacsony eseménygyakoriságú (percenként 1-10 esemény), korlátozott infrastruktúrájú alkalmazásokhoz vagy régi böngészők támogatásának szükségessége esetén.
  • WebSocket — optimális megoldás nagy terhelésű valós idejű alkalmazásokhoz (tőzsdei adatok, online játékok, együttműködő szerkesztők) másodpercenként több száz üzenettel.
  • Hibrid megközelítés — egyes alkalmazások Long Pollingot használnak fallbackként a WebSocketet nem támogató kliensek számára, automatikus protokollváltással.

A Mozilla Developer Network (2024) szerint a WebSocketet támogatja az összes modern böngésző a 2011-2015-ös verzióktól kezdve, de a vállalati proxyk (pl. Symantec Blue Coat) továbbra is blokkolják a vállalati hálózatok 15-20%-ában, ami fenntartja a Long Polling relevanciáját fallback megoldásként.

Gyakran Ismételt Kérdések

Mi az a Long Polling egyszerű szavakkal?

Long Polling az, amikor a kliens megkéri a szervert: “válaszolj, amikor új adatok jelennek meg”, és a szerver nyitva tartja a kapcsolatot, várva az eseményt. Amint az adatok megjelennek, a szerver válaszol, a kliens pedig azonnal felteszi ugyanazt a kérdést újra.

Miben különbözik a Long Polling a Short Pollingtól?

Short Pollingnál a kliens minden N másodpercben megkérdezi a szervert, van-e adat, még akkor is, ha nincs. Long Pollingnál a kliens egyszer kérdez, és a szerver csak akkor válaszol, amikor az adatok tényleg megjelennek. A Long Polling kevesebb üres kérést generál és csökkenti a hálózati terhelést.

Mikor használjunk Long Pollingot WebSocket helyett?

Long Pollingot akkor érdemes használni, amikor a WebSocket nem elérhető: a nem-HTTP protokollokat blokkoló vállalati hálózatokban, visszafelé kompatibilitás szükségessége esetén régi böngészőkkel, vagy hosting oldali korlátozásoknál. A WebSocket hatékonyabb a nagy frekvenciájú adatcseréhez.

Milyen timeoute-ot állítsunk be a Long Pollinghoz?

Az ajánlott Long Polling timeout 30-45 másodperc. Kisebb érték (10-15 másodperc) növeli a kérések számát, nagyobb (60+ másodperc) kockázatos a köztes terheléselosztók általi kapcsolatmegszakadás miatt. A timeout értéke a hálózati architektúrától és a késleltetési követelményektől függ.

Mik a Long Polling hátrányai?

A fő Long Polling hátrányok — magas memóriafogyasztás a szerveren több ezer kapcsolat tartásakor, a vízszintes skálázás nehézsége (központosított eseménysor szükséges) és a valódi kétirányú kommunikáció hiánya — az adatok szerverre küldéséhez külön POST kérések szükségesek.

Összefoglaló

  • Long Polling — valós idejű adatátviteli technika, ahol a szerver addig tartja a HTTP-kérést, amíg esemény meg nem jelenik, és csak azután küld választ a kliensnek.
  • Mechanizmus a HTTP-kapcsolat aszinkron tartásán alapul: a szerver nem küld üres választ, hanem 30-45 másodpercig vár adatra vagy timeoutra.
  • Előny — kompatibilitás a teljes HTTP-infrastruktúrával: proxyk, terheléselosztók, tűzfalak nem blokkolják a Long Pollingot, ellentétben a WebSocketkel.
  • Hátrány — erőforrás-igényesség a szerver oldalán: minden kapcsolat memóriát foglal és aszinkron feldolgozást igényel még események hiányában is.
  • Alkalmazás — chat, értesítések, monitorozó panelek, aktivitási hírfolyamok és együttműködő szerkesztők alacsony frissítési gyakorisággal.
  • Összehasonlítás — hatékonyabb, mint a Short Polling ritka eseményeknél, de alulmarad a WebSocketkel szemben teljesítményben és skálázhatóságban a nagy frekvenciájú forgatókönyveknél.
  • Ajánlás — használja a Long Pollingot fallbackként a WebSocket elérhetetlensége esetén vagy egyszerű valós idejű forgatókönyvekhez alacsony eseménygyakorisággal.

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.

Projekt megbeszélése

Olvassa el is