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 — 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.
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.
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 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.
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.
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.
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.
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.
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.
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 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.
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 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.
| Xususiyat | Long Polling | Short Polling |
|---|---|---|
| Javobni boshlash | Server hodisa vaqtida ma'lumot yuboradi | Server har bir mijoz so'roviga javob beradi |
| Yetkazish kechikishi | Minimal, 1 soniyagacha | So'rov intervaliga bog'liq, 3-60 soniya |
| So'rovlar soni | Har bir hodisa yoki timeout uchun 1 so'rov | Vaqt birligida N so'rov (sobit) |
| Bo'sh holatdagi trafik | Past (bitta ochiq so'rov) | Yuqori (har N soniyada so'rovlar) |
| Server yuki | Ulanishlarni ushlab turish | Tez-tez so'rovlarni qayta ishlash |
| Amalga oshirish murakkabligi | O'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.
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.
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 — 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.
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.
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.
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.
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
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.