Long Polling: bu nima, qanday ishlaydi va qayerda ishlatiladi

Muallif: IT Sectr Nashr etilgan: 2026-06-02 O'qish vaqti: 8 daq

Long Polling — bu mijoz va server o'rtasidagi o'zaro ta'sir texnikasi bo'lib, bunda server yangi ma'lumotlar paydo bo'lguncha yoki vaqt tugaguncha HTTP so'rovini ochiq ushlab turadi. Davriy so'rovdan farqli o'laroq, server darhol bo'sh javob qaytarmaydi, balki ma'lumotlarni mijozga yuborish uchun hodisaning sodir bo'lishini kutadi. MDN Web Docs, 2024 ma'lumotlariga ko'ra, Long Polling WebSocket mavjud bo'lmagan yoki ortiqcha bo'lgan real vaqt ilovalari uchun talab qilinadigan yechim bo'lib qolmoqda.

Asosiy fikrlar

  • Long Polling — server ma'lumot paydo bo'lguncha HTTP so'rovini ushlab turadigan va shundan keyingina mijozga javob yuboradigan texnika.
  • Mexanizm uzoq HTTP ulanishlariga asoslanadi: mijoz so'rov yuboradi, server darhol javob bermaydi, balki hodisa yoki vaqt tugashini kutadi.
  • Farqi Short Pollingdan shundaki, server ma'lumot yuborishni boshlaydi va mijoz taymer bilan serverni so'rov qilmaydi.
  • Qo'llanilishi chatlar, bildirishnomalar, faoliyat lentalari va real vaqt monitoring tizimlarini o'z ichiga oladi.
  • Cheklov — ochiq so'rovlarni ushlab turish tufayli ko'p sonli bir vaqtda ulanishlarda serverga yuqori yuk.

Long Polling nima

Long Polling — bu mijoz-server arxitekturasidagi o'zaro ta'sir namunasi bo'lib, bunda mijoz HTTP so'rovini boshlaydi va server yangi ma'lumotlar paydo bo'lguncha yoki belgilangan vaqt tugaguncha javob yuborishni kechiktiradi. Javobni olgandan so'ng, mijoz darhol keyingi so'rovni yuboradi va uzluksiz ulanish effektini yaratadi.

Long Polling texnikasi bo'sh HTTP so'rovlari sonini kamaytirish uchun Short Pollingning evolyutsion rivojlanishi sifatida paydo bo'ldi. An'anaviy so'rovda mijoz har N sekundda so'rovlar yuboradi va server yangi ma'lumotlar bo'lmasa ham javob beradi. Long Pollingda server ulanishni ushlab turish mexanizmidan foydalanadi, bu befoyda trafik hajmini keskin kamaytiradi.

Long Pollingning paydo bo'lish tarixi

2011 yilda WebSocket paydo bo'lishidan oldin, Long Polling vebda real vaqtni tashkil qilishning asosiy usuli edi. Facebook va Gmail kabi kompaniyalar 2010-yillarning boshida o'z chatlari va bildirishnomalari uchun ushbu texnikadan foydalanganlar. High Performance Browser Networking (Grigorik, 2013) tadqiqotiga ko'ra, Long Polling o'sha davrdagi yirik veb ilovalarda real vaqt ulanishlarining 95% gacha qayta ishlagan.

Long Pollingning asosiy prinsipi

Mijoz serverga standart HTTP so'rovini yuboradi. Server so'rovni olgandan so'ng darhol javob qaytarmaydi — so'rovni kutish navbatiga joylashtiradi. Serverda hodisa sodir bo'lganda (yangi xabar, ma'lumot o'zgarishi), server javobni shakllantiradi va uni mijozga yuboradi. Mijoz javobni olgandan so'ng darhol yangi Long Polling so'rovini yaratadi va sikl takrorlanadi.

Long Polling qanday ishlaydi

Long Polling quyidagi bosqichlar ketma-ketligi bo'yicha ishlaydi. Mijoz server endpointiga HTTP GET so'rovini yuboradi. Server so'rovni olgandan so'ng hodisa navbatida yangi ma'lumotlar mavjudligini tekshiradi. Agar ma'lumotlar bo'lmasa, server darhol javob yubormasdan so'rovni kutish holatida ushlab turadi. ushlab turish mexanizmi serverning amalga oshirilishiga bog'liq — ko'pincha callbacklar bilan asinxron qayta ishlash yoki hodisa arxitekturasi qo'llaniladi.

Server tomonida hodisa sodir bo'lganda (masalan, foydalanuvchi chatda xabar yubordi), server ushbu ma'lumotlarni o'z ichiga olgan HTTP javobini yaratadi va ulanishni tugatadi. Mijoz javobni oladi, ma'lumotlarni qayta ishlaydi va darhol yangi so'rovni boshlaydi. Agar kutish vaqtida ma'lumotlar paydo bo'lmasa, server vaqt tugaganda bo'sh javob yuboradi va mijoz ham ulanishni qayta yaratadi. Odatda yuk va kechikish o'rtasidagi muvozanat uchun timeout 30-60 soniyani tashkil qiladi.

Vaqt tugashlari va ulanishni boshqarish

Long Polling sozlamasining asosiy parametri kutish vaqt tugashi hisoblanadi. Juda qisqa vaqt tugashi (10 soniyadan kam) so'rovlar sonining ko'payishiga olib keladi va texnikani Short Pollingga yaqinlashtiradi. Juda uzoq (120 soniyadan ortiq) oraliq proksi va yuk balanslagichlari tomonidan ulanishning uzilishiga sabab bo'lishi mumkin. Aksariyat stsenariylar uchun tavsiya etilgan qiymat 30-45 soniya.

Ko'p sonli hodisalarni qayta ishlash

Agar serverda bitta Long Polling so'rovi vaqtida bir nechta hodisa sodir bo'lgan bo'lsa, server ularning barchasini bitta javobda uzatishi yoki mijoz tomonida hodisa navbatini tashkil qilishi kerak. Buning uchun hodisa buferlash qo'llaniladi: server so'rovni ushlab turish vaqtida sodir bo'lgan hodisalarni to'playdi va ularni javob mazmunida ma'lumotlar massivi sifatida uzatadi.

JavaScriptda Long Polling amalga oshirish misoli

Zamonaviy Fetch API dan foydalanib mijoz tomonida Long Pollingning oddiy amalga oshirilishini ko'rib chiqaylik. Mijoz funksiyasi so'rov yuboradi va javobni olgandan so'ng o'zini rekursiv chaqiradi.

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 xatosi", error);
        setTimeout(() => longPoll(url), 3000);
    }
}

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

longPoll("/api/events");

Ushbu kod cheksiz Long Polling siklini yaratadi: javobni olgandan so'ng funksiya darhol yangi so'rov yuboradi. Ulanish xatosi holatida serverga ko'chki yukining oldini olish uchun qayta urinishdan oldin uch soniyali kechikish o'rnatiladi.

Node.js da server amalga oshirish

Server tomonida hodisa paydo bo'lguncha yoki vaqt tugaguncha so'rovni ushlab turish kerak. Node.js da EventEmitter yordamida amalga oshirish misoli ushbu mexanizmni namoyish etadi.

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

Server qismi yangi ma'lumotlar paydo bo'lganda kutayotgan Long Polling ulanishlariga xabar berish uchun EventEmitter dan foydalanadi. 30 soniyali vaqt tugashiga erishilganda server bo'sh hodisalar massivini qaytaradi va mijoz yangi so'rov yaratadi.

Long Polling qachon qo'llaniladi

Long Polling real vaqtda ma'lumot yetkazish talab qilinadigan, ammo texnik yoki infratuzilma sabablaridan WebSocketdan foydalanish mumkin bo'lmagan stsenariylarda qo'llaniladi. Eng keng tarqalgan holatlar — WebSocket ulanishlarini bloklaydigan korporativ proksi va xavfsizlik devorlari, shuningdek server tomonida protokolni cheklangan qo'llab-quvvatlash muhitlari.

  • Chatlar va messenjerlar — Long Polling WebSocketsiz HTTP orqali ishlaydigan messenjerlarning veb versiyalarida xabar yetkazilishini ta'minlaydi.
  • Monitoring panellari — 1-5 soniya kechikish bilan ma'lumotlarning dolzarbligi muhim bo'lgan DevOps metrikalari, jurnallar va signallar uchun real vaqt tizimlari.
  • Bildirishnomalar — Service Workers va Push APIsiz brauzerda bildirishnomalarni yetkazish.
  • Faoliyat lentalari — ijtimoiy tarmoqlar va yangi yozuvlar paydo bo'lganda kontentni avtomatik yangilaydigan yangiliklar lentalari.
  • Birgalikda ishlash — foydalanuvchilar o'rtasida o'zgarishlarni asosiy sinxronlash bilan Google Docs tipidagi muharrirlar.

Long Pollingni tanlashning asosiy omili orqaga muvofiqlikdir. Barcha HTTP mijozlari va serverlari ushbu usulni qo'llab-quvvatlaydi, bu uni qo'shimcha bog'liqliklarsiz real vaqt uchun universal yechimga aylantiradi. HTTP Archive (2024) ma'lumotlariga ko'ra, barcha veb-saytlarning taxminan 8% asosiy real vaqt funksionalligi uchun Long Pollingdan foydalanishda davom etmoqda.

Long Polling vs Short Polling

Long Polling va Short Polling bir xil vazifani — ma'lumotlarni serverdan mijozga yetkazishni hal qiladi, ammo mexanizm va samaradorlik jihatidan tubdan farq qiladi. Short Polling sobit so'rov intervalidan foydalanadi, bunda mijoz serverda yangi ma'lumotlar paydo bo'lishidan qat'iy nazar teng vaqt oralig'ida HTTP so'rovlarini yuboradi.

XususiyatLong PollingShort Polling
Javobni boshlashServer hodisa vaqtida ma'lumot yuboradiServer har bir mijoz so'roviga javob beradi
Yetkazish kechikishiMinimal, 1 soniyagachaSo'rov intervaliga bog'liq, 3-60 soniya
So'rovlar soniHar bir hodisa yoki timeout uchun 1 so'rovVaqt birligida N so'rov (sobit)
Bo'sh holatdagi trafikPast (bitta ochiq so'rov)Yuqori (har N soniyada so'rovlar)
Server yukiUlanishlarni ushlab turishTez-tez so'rovlarni qayta ishlash
Amalga oshirish murakkabligiO'rta (asinxron qayta ishlash)Past (oddiy HTTP so'rovlari)

Short Polling amalga oshirishda soddaroq, ammo bir xil ma'lumot yangilash chastotasida server va tarmoqqa sezilarli darajada ko'proq yuk yaratadi. Agar 5 soniyadan kam kechikish talab etilsa, Short Polling daqiqada o'nlab so'rovlarni yaratadi, Long Polling esa har bir hodisa yoki timeout uchun bitta so'rovdan foydalanadi. Noyob hodisalari bo'lgan ilovalar uchun Long Polling trafik jihatidan ancha samaralidir.

Long Polling vs WebSocket

WebSocket — bu dastlabki HTTP qo'l siqishdan so'ng TCP ustida ishlaydigan to'liq huquqli ikki tomonlama real vaqt protokoli. Long Pollingdan farqli o'laroq, WebSocket bitta doimiy ulanishni o'rnatadi va serverga yangi HTTP so'rovini yaratmasdan istalgan vaqtda mijozga ma'lumot yuborishga imkon beradi.

Long Polling va WebSocket o'rtasidagi tanlov bir necha omillarga bog'liq. Muvofiqlik: Long Polling barcha proksi va xavfsizlik devorlari orqali ishlaydi, WebSocket korporativ tarmoqlar tomonidan bloklanishi mumkin. Samaradorlik: WebSocket kichikroq overheadga ega (to'liq HTTP sarlavhalariga nisbatan ramka uchun 2 bayt), bu xabarlarning yuqori chastotasida muhimdir. Masshtablash: Long Polling ko'p sonli ulanishlarni ushlab turish tufayli server tomonida ko'proq resurslarni talab qiladi, WebSocket har bir sessiya uchun sobit ulanishdan foydalanadi.

  • Long Polling — past hodisa chastotasi (daqiqada 1-10 hodisa), cheklangan infratuzilma yoki eski brauzerlarni qo'llab-quvvatlash zarurati bo'lgan ilovalar uchun eng yaxshi tanlov.
  • WebSocket — soniyada yuzlab xabarlar bilan yuqori yuklangan real vaqt ilovalari (birja ma'lumotlari, onlayn o'yinlar, hamkorlikdagi muharrirlar) uchun optimal yechim.
  • Gibrid yondashuv — ba'zi ilovalar WebSocketni qo'llab-quvvatlamaydigan mijozlar uchun Long Pollingdan fallback sifatida foydalanadi, protokol avtomatik ravishda almashtiriladi.

Mozilla Developer Network (2024) ma'lumotlariga ko'ra, WebSocket 2011-2015 yil versiyalaridan boshlab barcha zamonaviy brauzerlar tomonidan qo'llab-quvvatlanadi, ammo korporativ proksi (masalan, Symantec Blue Coat) uni korporativ tarmoqlarning 15-20 foizida bloklashda davom etadi, bu Long Pollingning fallback yechimi sifatida dolzarbligini saqlab qoladi.

Ko'p beriladigan savollar

Long Polling oddiy so'zlar bilan nima?

Long Polling — bu mijoz serverdan “yangi ma'lumotlar paydo bo'lganda javob ber” deb so'raydigan va server hodisani kutib, ulanishni ochiq ushlab turadigan vaziyat. Ma'lumotlar paydo bo'lishi bilan server javob beradi va mijoz darhol xuddi shu savolni yana beradi.

Long Polling Short Pollingdan nimasi bilan farq qiladi?

Short Pollingda mijoz har N soniyada serverdan ma'lumot bor-yo'qligini so'raydi, hatto ma'lumot bo'lmasa ham. Long Pollingda mijoz bir marta so'raydi va server faqat ma'lumot haqiqatan paydo bo'lganda javob beradi. Long Polling kamroq bo'sh so'rovlar yaratadi va tarmoq yukini kamaytiradi.

Qachon WebSocket o'rniga Long Polling ishlatish kerak?

Long Polling WebSocket mavjud bo'lmaganda ishlatilishi kerak: HTTP bo'lmagan protokollarni bloklaydigan korporativ tarmoqlarda, eski brauzerlar bilan orqaga muvofiqlik zarurati bo'lganda yoki hosting tomondan cheklovlar bo'lganda. WebSocket yuqori chastotali ma'lumot almashinuvi uchun samaraliroq.

Long Polling uchun qanday vaqt tugashini o'rnatish kerak?

Tavsiya etilgan Long Polling vaqt tugashi 30-45 soniya. Kichikroq qiymat (10-15 soniya) so'rovlar sonini oshiradi, kattaroq (60+ soniya) oraliq yuk balanslagichlari tomonidan ulanishning uzilishi xavflidir. Vaqt tugashining qiymati tarmoq arxitekturasiga va kechikish talablariga bog'liq.

Long Pollingning kamchiliklari qanday?

Asosiy Long Polling kamchiliklari — minglab ulanishlarni ushlab turishda serverda yuqori xotira iste'moli, gorizontal masshtablash qiyinligi (markazlashtirilgan hodisa navbati talab qilinadi) va haqiqiy ikki tomonlama aloqaning yo'qligi — serverga ma'lumot yuborish uchun alohida POST so'rovlari kerak.

Xulosa

  • Long Polling — server hodisa paydo bo'lguncha HTTP so'rovini ushlab turadigan va shundan keyingina mijozga javob yuboradigan real vaqt ma'lumot uzatish texnikasi.
  • Mexanizm asinxron HTTP ulanishini ushlab turishga asoslanadi: server bo'sh javob qaytarmaydi, 30-45 soniya ma'lumot yoki vaqt tugashini kutadi.
  • Afzallik — barcha HTTP infratuzilmasi bilan muvofiqlik: proksi, yuk balanslagichlari, xavfsizlik devorlari WebSocketdan farqli o'laroq Long Pollingni bloklamaydi.
  • Kamchilik — server tomonida resurs talabchanligi: har bir ulanish xotira egallaydi va hodisalar bo'lmasa ham asinxron qayta ishlashni talab qiladi.
  • Qo'llanilishi — chatlar, bildirishnomalar, monitoring panellari, faoliyat lentalari va past yangilanish chastotasi bilan hamkorlikdagi muharrirlar.
  • Taqqoslash — noyob hodisalarda Short Pollingdan samaraliroq, ammo yuqori chastotali stsenariylarda samaradorlik va masshtablash bo'yicha WebSocketdan past.
  • Tavsiya — WebSocket mavjud bo'lmaganda Long Pollingni fallback sifatida yoki past hodisa chastotasi bilan oddiy real vaqt stsenariylari uchun foydalaning.

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing