Short Polling — је техника интеракције клијента и сервера при којој клијент шаље HTTP захтеве у фиксним временским интервалима за добијање ажурираних података. Сервер обрађује сваки захтев одмах, враћајући тренутно стање чак и кад нема промена. Према Amazon Web Services, 2024, Short Polling је најједноставнији за имплементацију, али најмање ефикасан метод испитивања, који ствара прекомерно оптерећење сервера и мреже.
Главни закључци
Short Polling — је образац комуникације у којем клијент периодично шаље HTTP захтеве серверу са унапред дефинисаним интервалом, а сервер обрађује сваки захтев синхроно и одмах враћа резултат. Интервал испитивања се подешава на страни клијента помоћу тајмера и обично износи од 1 до 60 секунди, у зависности од захтева за ажурношћу података.
Short Polling је хронолошки први механизам организације реалног времена у веб апликацијама. Почетком 2000-их, пре појаве XMLHttpRequest друге генерације, веб странице су користиле <meta http-equiv="refresh"> или периодично поновно учитавање iframe-а за ажурирање садржаја. Са појавом AJAX (Asynchronous JavaScript and XML) технологије 2005. године, Short Polling је постао стандардни приступ за ажурирање података без пуног поновног учитавања странице.
Архитектура Short Polling укључује три компоненте: клијентски тајмер, HTTP захтев и серверски хендлер. Клијент покреће интервални тајмер, при чијем активирању се шаље GET захтев серверу. Сервер извршава упит бази података или другом извору, формира одговор и одмах га враћа клијенту. Клијент ажурира интерфејс и чека следеће активирање тајмера. Овај циклус се понавља бесконачно док је апликација активна.
Главни проблем Short Polling — неизбежни празни захтеви. Ако се подаци ретко мењају, већина захтева враћа резултат „без промена“, трошећи пропусну моћ мреже и време процесора на обраду. Са 10 000 клијената и интервалом испитивања од 5 секунди, сервер прима 2 000 захтева у секунди — значајан део је бескористан ако је фреквенција ажурирања 1 догађај у минути.
Short Polling ради по једноставном циклусу: клијент поставља интервални тајмер са одређеним периодом (нпр. 5000 мс). При сваком активирању тајмера, клијент креира HTTP GET захтев ка серверском ендпоинту, обично са параметром временског жига последње ажурности. Сервер прима захтев, проверава постојање нових података након наведеног жига и враћа одговор — било са новим подацима или са индикатором непостојања ажурирања.
Критични параметар подешавања Short Polling — интервал испитивања. Превише кратак интервал (мање од 3 секунде) ствара високо оптерећење сервера и мреже. Превише дуг (преко 30 секунди) смањује ажурност података. Оптимални интервал зависи од сценарија: за мониторинг панеле — 5–15 секунди, за новости — 30–60 секунди, за критичне аларме — 1–3 секунде. Избор интервала је увек компромис између ажурности података и оптерећења инфраструктуре.
За смањење оптерећења при мировању користи се адаптивни интервал: ако више узастопних захтева врати празан резултат, интервал се повећава (нпр. са 5 на 15 секунди). По појави нових података, интервал се ресетује на минималну вредност. Алгоритам експоненцијалног кашњења (exponential backoff) омогућава смањење броја празних захтева 3–5 пута при ретким ажурирањима.
Размотримо клијентску имплементацију Short Polling коришћењем setInterval и Fetch API. Функција прихвата URL ендпоинта и интервал испитивања у милисекундама.
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("Примљено", data.updates.length, "updates");
}
} catch (error) {
console.error("Испитивање није успело:", error);
}
}, intervalMs);
return timerId;
}
const timer = startPolling("/api/updates", 5000);
// clearInterval(timer) за заустављање
Код креира интервал испитивања са периодом од 5 секунди и преноси серверу временски жиг последње ажурности. Сервер може користити овај параметар за филтрирање података и враћање само нових записа, смањујући количину пренете информације. Функција враћа идентификатор тајмера за могућност заустављања испитивања.
Серверска имплементација за Short Polling је изузетно једноставна — то је обичан REST endpoint који прима GET захтеве и враћа JSON одговор са тренутним стањем или подацима промењеним након наведеног жига.
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);
Сервер добија параметар since и филтрира записе чији временски жиг премашује наведени. Овакав приступ минимизира количину података у сваком одговору, враћајући само инкременталне промене. При непостојању нових података, сервер враћа празан низ, а клијент наставља испитивање по распореду.
Short Polling и Long Polling решавају исти задатак — испоруку података са сервера — али се радикално разликују по ефикасности. Short Polling користи фиксни интервал захтева, стварајући предвидљиво оптерећење, док Long Polling држи везу до појаве догађаја, минимизирајући број празних одговора.
| Критеријум | Short Polling | Long Polling |
|---|---|---|
| Сложеност имплементације | Ниска, стандардни REST | Средња, асинхрона обрада |
| Кашњење ажурирања | Фиксно, до N секунди | Минимално, при појави догађаја |
| Број захтева | Стално, N захтева у минути | По догађајима, обично знатно мање |
| Оптерећење сервера | Високо при малом интервалу | Држање веза, асинхрона обрада |
| Саобраћај при мировању | Максималан, сваки захтев са заглављима | Минималан, једна отворена веза |
| Скалирање | Једноставно, безстањски захтеви | Сложено, потребан заједнички ред догађаја |
Избор између техника зависи од учесталости ажурирања података. Ако се догађаји дешавају чешће од једном у 10 секунди — оба приступа пружају упоредиво оптерећење, и Short Polling може бити једноставнији. Ако су догађаји ретки (сати или минути између промена) — Long Polling је пожељнији, јер не ствара празне захтеве. За прелазне сценарије, избор зависи од инфраструктурних ограничења и могућности кориштења WebSocket.
Short Polling се примењује у сценаријима где су захтеви за ажурношћу података ниски, а једноставност имплементације има приоритет над ефикасношћу. Најтипичнији случајеви су унутрашње административне панеле, системи за мониторинг са ниском учесталошћу аларми и апликације које подносе кашњење од 15–30 секунди.
Важно ограничење — Short Polling није погодан за временски критичне апликације (трговачки терминали, системи за хитно упозорење), где је кашњење чак и од 1 секунде неприхватљиво. У таквим сценаријима потребно је користити WebSocket, Server-Sent Events или Long Polling. При пројектовању система са Short Polling, потребно је израчунати буџет захтева: са 1 000 клијената и интервалом од 5 секунди, сервер обрађује 12 000 захтева у минути, што захтева одговарајућу ресурсну базу.
Често постављана питања
Short Polling — то је кад апликација сваких N секунди пита сервер: „има нових података?“, и сервер сваки пут одговара, чак ако се ништа није променило. То је као кад прилазите поштанском сандучету сваких 5 минута да проверите да ли је стигла новa пошта.
Оптимални Short Polling интервал зависи од сценарија: 5–10 секунди за панеле за мониторинг, 15–30 секунди за новости, 30–60 секунди за странице статуса. Интервал треба да буде компромис између ажурности података и оптерећења сервера. Почните са 10 секунди и прилагођавајте на основу резултата тестирања.
Short Polling — клијент константно „тега“ сервер са фиксним интервалом. Long Polling — клијент шаље један захтев, а сервер га држи отвореним до појаве података. Short Polling је једноставнији за имплементацију, али ствара више празних захтева при ретким ажурирањима.
Short Polling је једноставнији за имплементацију од WebSocket-а и не захтева посебан протокол — ради путем обичних HTTP захтева. Short Polling је оправдан за једноставне унутрашње системе где је кашњење од 10–30 секунди прихватљиво, а инфраструктурни трошкови за одржавање WebSocket-а нису оправдани.
Користите адаптивни интервал: при непостојању ажурирања, повећајте паузу између захтева 2–3 пута. Додајте параметар since са временским жигом последњег захтева, да би сервер враћао само инкременталне промене. Кеширајте одговоре на страни CDN-а или прокси сервера за смањење оптерећења бекенда.
Закључак
setInterval или рекурзивног setTimeout са сталним или адаптивним интервалом.Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође