Short Polling — to technika interakcji klienta i serwera, w której klient wysyła żądania HTTP w stałych odstępach czasu w celu uzyskania zaktualizowanych danych. Serwer przetwarza każde żądanie natychmiast, zwracając aktualny stan nawet przy braku zmian. Według Amazon Web Services, 2024, Short Polling jest najprostszą w implementacji, ale najmniej efektywną metodą odpytywania, tworzącą nadmierne obciążenie serwera i sieci.
Najważniejsze
Short Polling — to wzorzec komunikacji, w którym klient okresowo wysyła żądania HTTP do serwera z górnym interwałem, a serwer przetwarza każde żądanie synchronicznie i natychmiast zwraca wynik. Interwał odpytywania jest ustawiany po stronie klienta za pomocą timerów i zwykle wynosi od 1 do 60 sekund, w zależności od wymagań dotyczących aktualności danych.
Short Polling jest chronologicznie pierwszym mechanizmem organizacji czasu rzeczywistego w aplikacjach internetowych. Na początku lat 2000., przed pojawieniem się XMLHttpRequest drugiej generacji, strony internetowe używały <meta http-equiv=”refresh”> lub okresowego przeładowywania iframe w celu aktualizacji zawartości. Wraz z pojawieniem się technologii AJAX (Asynchronous JavaScript and XML) w 2005 roku, Short Polling stał się standardowym podejściem do aktualizacji danych bez pełnego przeładowania strony.
Architektura Short Polling obejmuje trzy komponenty: timer kliencki, żądanie HTTP i program obsługi serwera. Klient uruchamia timer interwałowy, po którego wyzwoleniu wysyłane jest żądanie GET do serwera. Serwer wykonuje zapytanie do bazy danych lub innego źródła, tworzy odpowiedź i natychmiast zwraca ją klientowi. Klient aktualizuje interfejs i czeka na kolejne wyzwolenie timera. Cykl ten powtarza się w nieskończoność, dopóki aplikacja jest aktywna.
Główny problem Short Polling — nieuniknione puste żądania. Jeśli dane zmieniają się rzadko, większość żądań zwraca wynik „bez zmian”, marnując przepustowość sieci i czas procesora na przetwarzanie. Przy 10 000 klientów z interwałem odpytywania 5 sekund serwer otrzymuje 2 000 żądań na sekundę — znaczna część z nich jest bezużyteczna, jeśli częstotliwość aktualizacji wynosi 1 zdarzenie na minutę.
Short Polling działa według prostego cyklu: klient ustawia timer interwałowy z określonym okresem (np. 5000 ms). Przy każdym wyzwoleniu timera klient tworzy żądanie HTTP GET do punktu końcowego serwera, zwykle z parametrem znacznika czasu ostatniej aktualizacji. Serwer otrzymuje żądanie, sprawdza czy są nowe dane po określonym znaczniku i zwraca odpowiedź — albo z nowymi danymi, albo ze wskaźnikiem braku aktualizacji.
Krytyczny parametr konfiguracji Short Polling — interwał odpytywania. Zbyt krótki interwał (poniżej 3 sekund) tworzy duże obciążenie serwera i sieci. Zbyt długi (powyżej 30 sekund) obniża aktualność danych. Optymalny interwał zależy od scenariusza: dla paneli monitorowania — 5–15 sekund, dla kanałów informacyjnych — 30–60 sekund, dla krytycznych alertów — 1–3 sekundy. Wybór interwału jest zawsze kompromisem między aktualnością danych a obciążeniem infrastruktury.
Aby zmniejszyć obciążenie w przypadku bezczynności, stosuje się interwał adaptacyjny: jeśli kilka kolejnych żądań zwróci pusty wynik, interwał zwiększa się (np. z 5 do 15 sekund). Gdy pojawią się nowe dane, interwał jest resetowany do wartości minimalnej. Algorytm opóźnienia wykładniczego (exponential backoff) pozwala zmniejszyć liczbę pustych żądań 3–5 razy przy rzadkich aktualizacjach.
Rozważmy implementację kliencką Short Polling z użyciem setInterval i Fetch API. Funkcja przyjmuje URL punktu końcowego i interwał odpytywania w milisekundach.
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("Otrzymano", data.updates.length, "updates");
}
} catch (error) {
console.error("Odpytywanie nie powiodło się:", error);
}
}, intervalMs);
return timerId;
}
const timer = startPolling("/api/updates", 5000);
// clearInterval(timer) do zatrzymania
Kod tworzy interwał odpytywania z okresem 5 sekund i przekazuje do serwera znacznik czasu ostatniej aktualizacji. Serwer może użyć tego parametru do filtrowania danych i zwracania tylko nowych rekordów, zmniejszając ilość przesyłanych informacji. Funkcja zwraca identyfikator timera umożliwiający zatrzymanie odpytywania.
Implementacja serwerowa Short Polling jest niezwykle prosta — to zwykły REST endpoint, który przyjmuje żądania GET i zwraca odpowiedź JSON z bieżącym stanem lub danymi zmienionymi po określonym znaczniku.
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);
Serwer otrzymuje parametr since i filtruje rekordy, których znacznik czasu przekracza określony. Takie podejście minimalizuje ilość danych w każdej odpowiedzi, zwracając tylko przyrostowe zmiany. W przypadku braku nowych danych serwer zwraca pustą tablicę, a klient kontynuuje odpytywanie zgodnie z harmonogramem.
Short Polling i Long Polling rozwiązują to samo zadanie — dostarczanie danych z serwera — ale radykalnie różnią się efektywnością. Short Polling używa stałego interwału żądań, tworząc przewidywalne obciążenie, podczas gdy Long Polling utrzymuje połączenie aż do wystąpienia zdarzenia, minimalizując liczbę pustych odpowiedzi.
| Kryterium | Short Polling | Long Polling |
|---|---|---|
| Złożoność implementacji | Niska, standardowy REST | Średnia, przetwarzanie asynchroniczne |
| Opóźnienie aktualizacji | Stałe, do N sekund | Minimalne, przy wystąpieniu zdarzenia |
| Liczba żądań | Stała, N żądań na minutę | Według zdarzeń, zwykle znacznie mniej |
| Obciążenie serwera | Wysokie przy małym interwale | Utrzymywanie połączeń, przetwarzanie asynchroniczne |
| Ruch przy bezczynności | Maksymalny, każde żądanie z nagłówkami | Minimalne, jedno otwarte połączenie |
| Skalowanie | Proste, żądania bezstanowe | Złożone, wymagana wspólna kolejka zdarzeń |
Wybór między technikami zależy od częstotliwości aktualizacji danych. Jeśli zdarzenia występują częściej niż raz na 10 sekund — oba podejścia dają porównywalne obciążenie, a Short Polling może okazać się prostszy. Jeśli zdarzenia są rzadkie (godziny lub minuty między zmianami) — Long Polling jest preferowany, ponieważ nie tworzy pustych żądań. W scenariuszach pośrednich wybór zależy od ograniczeń infrastrukturalnych i możliwości użycia WebSocket.
Short Polling jest stosowany w scenariuszach, w których wymagania dotyczące aktualności danych są niskie, a prostota implementacji ma priorytet nad efektywnością. Najbardziej typowe przypadki to wewnętrzne panele administracyjne, systemy monitorowania z niską częstotliwością alertów i aplikacje, w których opóźnienie 15–30 sekund jest akceptowalne.
Ważne ograniczenie — Short Polling nie nadaje się do krytycznych czasowo aplikacji (terminale handlowe, systemy alarmowe), gdzie opóźnienie nawet 1 sekundy jest niedopuszczalne. W takich scenariuszach należy użyć WebSocket, Server-Sent Events lub Long Polling. Podczas projektowania systemu z Short Polling należy obliczyć budżet żądań: przy 1 000 klientów z interwałem 5 sekund serwer przetwarza 12 000 żądań na minutę, co wymaga odpowiedniej bazy zasobów.
Często zadawane pytania
Short Polling — to sytuacja, w której aplikacja co N sekund pyta serwer: „są nowe dane?”, a serwer za każdym razem odpowiada, nawet jeśli nic się nie zmieniło. To jak podchodzenie do skrzynki pocztowej co 5 minut, aby sprawdzić, czy przyszła nowa korespondencja.
Optymalny interwał Short Polling zależy od scenariusza: 5–10 sekund dla paneli monitorowania, 15–30 sekund dla kanałów informacyjnych, 30–60 sekund dla stron statusu. Interwał powinien być kompromisem między aktualnością danych a obciążeniem serwera. Zacznij od 10 sekund i koryguj na podstawie wyników testów.
Short Polling — klient ciągle „szarpie” serwer ze stałym interwałem. Long Polling — klient wykonuje jedno żądanie, a serwer utrzymuje je otwarte aż do pojawienia się danych. Short Polling jest prostszy w implementacji, ale tworzy więcej pustych żądań przy rzadkich aktualizacjach.
Short Polling jest prostszy w implementacji niż WebSocket i nie wymaga specjalnego protokołu — działa przez zwykłe żądania HTTP. Short Polling jest uzasadniony w prostych systemach wewnętrznych, gdzie opóźnienie 10–30 sekund jest akceptowalne, a koszty infrastrukturalne utrzymania WebSocket są nieuzasadnione.
Użyj interwału adaptacyjnego: przy braku aktualizacji zwiększaj przerwę między żądaniami 2–3 razy. Dodaj parametr since ze znacznikiem czasu ostatniego żądania, aby serwer zwracał tylko przyrostowe zmiany. Buforuj odpowiedzi po stronie CDN lub serwera proxy, aby zmniejszyć obciążenie backendu.
Podsumowanie
setInterval lub rekurencyjny setTimeout ze stałym lub adaptacyjnym interwałem.Opracujemy aplikację mobilną pod klucz
IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.
Przeczytaj również