Long Polling: ce este, cum funcționează și unde se utilizează

Autor: IT Sectr Publicat: 2026-06-02 Timp de citire: 8 min

Long Polling este o tehnică de interacțiune client-server în care serverul menține cererea HTTP deschisă până la apariția datelor noi sau expirarea timeout-ului. Spre deosebire de interogarea periodică, serverul nu returnează imediat un răspuns gol, ci așteaptă producerea unui eveniment pentru a trimite datele către client. Potrivit MDN Web Docs, 2024, Long Polling rămâne o soluție căutată pentru aplicațiile în timp real unde WebSocket nu este disponibil sau este redundant.

Principalele puncte

  • Long Polling este o tehnică în care serverul menține cererea HTTP până la apariția datelor și abia apoi trimite răspunsul către client.
  • Mecanismul se bazează pe conexiuni HTTP lungi: clientul trimite o cerere, serverul nu răspunde imediat, ci așteaptă un eveniment sau timeout.
  • Diferența față de Short Polling constă în faptul că serverul inițiază trimiterea datelor, iar clientul nu interoghează serverul la timer.
  • Aplicarea include chaturi, notificări, feeduri de activitate și sisteme de monitorizare în timp real.
  • Limitarea — încărcare mare pe server la un număr mare de conexiuni simultane din cauza menținerii cererilor deschise.

Ce este Long Polling

Long Polling este un model de interacțiune în arhitectura client-server în care clientul inițiază o cerere HTTP, iar serverul amână trimiterea răspunsului până când apar date noi sau expiră un timeout specificat. După primirea răspunsului, clientul trimite imediat următoarea cerere, creând efectul unei conexiuni continue.

Tehnica Long Polling a apărut ca o dezvoltare evolutivă a Short Polling pentru reducerea numărului de cereri HTTP goale. În interogarea tradițională, clientul trimite cereri la fiecare N secunde, iar serverul răspunde chiar și în absența datelor noi. În Long Polling, serverul utilizează un mecanism de menținere a conexiunii, ceea ce reduce radical volumul de trafic inutil.

Istoria apariției Long Polling

Înainte de apariția WebSocket în 2011, Long Polling era principala metodă de organizare a timpului real în web. Companii precum Facebook și Gmail au folosit această tehnică pentru chat-urile și notificările lor la începutul anilor 2010. Potrivit cercetării High Performance Browser Networking (Grigorik, 2013), Long Polling procesa până la 95% din toate conexiunile în timp real în aplicațiile web mari ale acelei perioade.

Principiul de bază al Long Polling

Clientul trimite o cerere HTTP standard către server. Serverul, după primirea cererii, nu returnează imediat răspunsul — plasează cererea într-o coadă de așteptare. Când pe server are loc un eveniment (mesaj nou, modificare de date), serverul formează răspunsul și îl trimite clientului. Clientul, după primirea răspunsului, creează imediat o nouă cerere Long Polling, iar ciclul se repetă.

Cum funcționează Long Polling

Long Polling funcționează conform următoarei secvențe de pași. Clientul trimite o cerere HTTP GET către endpoint-ul serverului. Serverul, după primirea cererii, verifică disponibilitatea datelor noi în coada de evenimente. Dacă nu există date, serverul menține cererea în stare de așteptare, fără a trimite imediat răspunsul. Mecanismul de menținere depinde de implementarea serverului — cel mai des se utilizează procesarea asincronă cu callback-uri sau arhitectura bazată pe evenimente.

Când pe partea serverului are loc un eveniment (de exemplu, utilizatorul a trimis un mesaj în chat), serverul formează un răspuns HTTP cu corpul ce conține aceste date și încheie conexiunea. Clientul primește răspunsul, procesează datele și inițiază imediat o nouă cerere. Dacă în timpul așteptării nu au apărut date, serverul trimite un răspuns gol la expirarea timeout-ului, iar clientul reia conexiunea. Timeout-ul este de obicei de 30–60 de secunde pentru un echilibru între încărcare și întârziere.

Timeout-uri și gestionarea conexiunii

Parametrul cheie al configurării Long Polling este timeout-ul de așteptare. Un timeout prea scurt (sub 10 secunde) duce la creșterea numărului de cereri, apropiind tehnica de Short Polling. Un timeout prea lung (peste 120 de secunde) poate cauza întreruperea conexiunii de către proxy-urile intermediare și balansoarele de sarcină. Valoarea recomandată pentru majoritatea scenariilor este de 30–45 de secunde.

Gestionarea evenimentelor multiple

Dacă pe server au avut loc mai multe evenimente în timpul unei singure cereri Long Polling, serverul trebuie să le transmită pe toate într-un singur răspuns sau să organizeze o coadă de evenimente pe partea clientului. În acest scop se utilizează bufferizarea evenimentelor: serverul acumulează evenimentele care au avut loc în timpul menținerii cererii și le transmite ca un tablou de date în corpul răspunsului.

Exemplu de implementare Long Polling în JavaScript

Să analizăm o implementare simplă a Long Polling pe partea clientului folosind Fetch API modern. Funcția client trimite o cerere și se autoapelează recursiv după primirea răspunsului.

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

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

function handleData(data) {
    if (data.events && data.events.length > 0) {
        data.events.forEach(event => {
            console.log("Eveniment nou:", event);
        });
    }
}

longPoll("/api/events");

Acest cod creează o buclă infinită Long Polling: după primirea răspunsului, funcția trimite imediat o nouă cerere. În caz de eroare de conexiune, se stabilește o întârziere de trei secunde înainte de reîncercare, pentru a evita o încărcare în avalanșă a serverului.

Implementare server în Node.js

Pe partea serverului, este necesar să se mențină cererea până la apariția evenimentului sau expirarea timeout-ului. Un exemplu de implementare folosind EventEmitter în Node.js demonstrează acest mecanism.

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);

Partea server utilizează EventEmitter pentru a notifica conexiunile Long Polling în așteptare la apariția datelor noi. La atingerea timeout-ului de 30 de secunde, serverul returnează un tablou gol de evenimente, iar clientul creează o nouă cerere.

Când se aplică Long Polling

Long Polling se aplică în scenarii care necesită livrarea datelor în timp real, dar unde utilizarea WebSocket este imposibilă din motive tehnice sau de infrastructură. Cele mai frecvente cazuri — proxy-uri corporative și firewall-uri care blochează conexiunile WebSocket, precum și medii cu suport limitat al protocolului pe partea serverului.

  • Chaturi și mesagerie — Long Polling asigură livrarea mesajelor în versiunile web ale mesagerelor care funcționează prin HTTP fără WebSocket.
  • Panouri de monitorizare — sisteme în timp real pentru metrici DevOps, loguri și alerte, unde actualitatea datelor cu o întârziere de 1–5 secunde este importantă.
  • Notificări — livrarea notificărilor în browser fără utilizarea Service Workers și Push API.
  • Feeduri de activitate — rețele sociale și feeduri de știri cu actualizare automată a conținutului la apariția noilor intrări.
  • Lucru colaborativ — editoare de tip Google Docs cu sincronizare de bază a modificărilor între utilizatori.

Factorul cheie al alegerii Long Polling este compatibilitatea inversă. Toți clienții și serverele HTTP suportă această metodă, ceea ce o face o soluție universală pentru timp real fără dependențe suplimentare. Potrivit HTTP Archive (2024), aproximativ 8% din toate site-urile web continuă să utilizeze Long Polling pentru funcționalitatea de bază în timp real.

Long Polling vs Short Polling

Long Polling și Short Polling rezolvă aceeași sarcină — livrarea datelor de la server la client — dar diferă fundamental prin mecanism și eficiență. Short Polling utilizează un interval fix de interogare, în care clientul trimite cereri HTTP la intervale egale, indiferent dacă pe server au apărut date noi.

CaracteristicăLong PollingShort Polling
Inițierea răspunsuluiServerul trimite date la evenimentServerul răspunde la fiecare cerere a clientului
Întârzierea livrăriiMinimă, până la 1 secundăDepinde de intervalul de interogare, 3–60 secunde
Numărul de cereri1 cerere per eveniment sau timeoutN cereri per unitate de timp (fix)
Traficul în repausScăzut (o cerere deschisă)Ridicat (cereri la fiecare N secunde)
Încărcarea serveruluiMenținerea conexiunilorProcesarea cererilor frecvente
Complexitatea implementăriiMedie (procesare asincronă)Scăzută (cereri HTTP obișnuite)

Short Polling este mai simplu de implementat, dar generează o încărcare semnificativ mai mare asupra serverului și rețelei la aceeași frecvență de actualizare a datelor. Dacă se necesită o întârziere mai mică de 5 secunde, Short Polling generează zeci de cereri pe minut, în timp ce Long Polling utilizează o cerere per eveniment sau timeout. Pentru aplicații cu evenimente rare, Long Polling este cu un ordin de mărime mai eficient din punct de vedere al traficului.

Long Polling vs WebSocket

WebSocket este un protocol bidirecțional complet în timp real, care funcționează pe TCP după o strângere de mână HTTP inițială. Spre deosebire de Long Polling, WebSocket stabilește o singură conexiune permanentă și permite serverului să trimită date clientului în orice moment fără a crea o nouă cerere HTTP.

Alegerea între Long Polling și WebSocket depinde de mai mulți factori. Compatibilitatea: Long Polling funcționează prin orice proxy și firewall, WebSocket poate fi blocat de rețelele corporative. Performanța: WebSocket are un overhead mai mic (2 octeți per cadru față de antetele HTTP complete), ceea ce este critic la frecvența ridicată a mesajelor. Scalabilitatea: Long Polling necesită mai multe resurse pe partea serverului din cauza menținerii multiplelor conexiuni, WebSocket utilizează o conexiune fixă per sesiune.

  • Long Polling — cea mai bună alegere pentru aplicații cu frecvență scăzută a evenimentelor (1–10 evenimente pe minut), infrastructură limitată sau necesitatea de a suporta browsere vechi.
  • WebSocket — soluția optimă pentru aplicații în timp real cu încărcare mare (date bursiere, jocuri online, editoare colaborative) cu sute de mesaje pe secundă.
  • Abordarea hibridă — unele aplicații utilizează Long Polling ca fallback pentru clienții care nu suportă WebSocket, cu comutarea automată a protocolului.

Potrivit Mozilla Developer Network (2024), WebSocket este suportat de toate browserele moderne începând cu versiunile 2011–2015, dar proxy-urile corporative (de exemplu, Symantec Blue Coat) continuă să îl blocheze în 15–20% din rețelele corporative, ceea ce menține relevanța Long Polling ca soluție fallback.

Întrebări frecvente

Ce este Long Polling în cuvinte simple?

Long Polling este atunci când clientul îi cere serverului: „răspunde când apar date noi”, iar serverul menține conexiunea deschisă, așteptând un eveniment. De îndată ce datele apar, serverul răspunde, iar clientul pune imediat aceeași întrebare din nou.

Cu ce se deosebește Long Polling de Short Polling?

La Short Polling, clientul întreabă serverul la fiecare N secunde dacă există date, chiar dacă nu sunt. La Long Polling, clientul întreabă o dată, iar serverul răspunde doar când datele apar cu adevărat. Long Polling creează mai puține cereri goale și reduce încărcarea rețelei.

Când să folosim Long Polling în loc de WebSocket?

Long Polling trebuie folosit când WebSocket nu este disponibil: în rețele corporative cu blocarea protocoalelor non-HTTP, la necesitatea compatibilității inverse cu browserele vechi sau cu limitări din partea hostingului. WebSocket este mai eficient pentru schimbul de date de înaltă frecvență.

Ce timeout să setăm pentru Long Polling?

Timeout-ul Long Polling recomandat este de 30–45 de secunde. O valoare mai mică (10–15 secunde) crește numărul de cereri, una mai mare (60+ secunde) este riscantă din cauza întreruperii conexiunii de către balansoarele intermediare. Valoarea timeout-ului depinde de arhitectura rețelei și de cerințele de întârziere.

Care sunt dezavantajele Long Polling?

Principalele dezavantaje ale Long Polling — consumul ridicat de memorie pe server la menținerea a mii de conexiuni, dificultatea scalării orizontale (necesită o coadă de evenimente centralizată) și lipsa unei comunicări bidirecționale reale — pentru trimiterea datelor către server sunt necesare cereri POST separate.

Rezumat

  • Long Polling — tehnică de transmitere a datelor în timp real, în care serverul menține cererea HTTP până la apariția evenimentului și abia apoi trimite răspunsul clientului.
  • Mecanismul se bazează pe menținerea asincronă a conexiunii HTTP: serverul nu returnează un răspuns gol, ci așteaptă date sau expirarea timeout-ului de 30–45 de secunde.
  • Avantajul — compatibilitatea cu întreaga infrastructură HTTP: proxy-uri, balansoare de sarcină, firewall-uri nu blochează Long Polling spre deosebire de WebSocket.
  • Dezavantajul — consumul de resurse pe partea serverului: fiecare conexiune ocupă memorie și necesită procesare asincronă chiar și în absența evenimentelor.
  • Aplicarea — chaturi, notificări, panouri de monitorizare, feeduri de activitate și editoare colaborative cu frecvență scăzută de actualizare.
  • Comparația — mai eficient decât Short Polling la evenimente rare, dar inferior WebSocket în performanță și scalabilitate pentru scenarii de înaltă frecvență.
  • Recomandarea — utilizați Long Polling ca fallback la indisponibilitatea WebSocket sau pentru scenarii simple în timp real cu frecvență scăzută a evenimentelor.

Vom dezvolta o aplicație mobilă la cheie

IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.

Discutați proiectul

Citiți și