Short Polling, istemcinin güncellenmiş verileri almak için sabit zaman aralıklarında HTTP istekleri gönderdiği bir istemci-sunucu iletişim tekniğidir. Sunucu her isteği hemen işler, hiçbir şey değişmemiş olsa bile mevcut durumu döndürür. Amazon Web Services, 2024'e göre, Short Polling uygulaması en basit ancak en az verimli polling yöntemidir ve sunucu ile ağ üzerinde aşırı yük oluşturur.
Önemli Noktalar
Short Polling, istemcinin önceden tanımlanmış bir aralıkta sunucuya periyodik olarak HTTP istekleri gönderdiği ve sunucunun her isteği senkronize olarak işleyip sonucu hemen döndürdüğü bir iletişim modelidir. Polling aralığı istemci tarafında zamanlayıcılar kullanılarak ayarlanır ve veri güncelliği gereksinimlerine bağlı olarak genellikle 1 ila 60 saniye arasında değişir.
Short Polling, tarihsel olarak web uygulamalarında gerçek zamanlı iletişimi düzenleyen ilk mekanizmadır. 2000'li yılların başında, ikinci nesil XMLHttpRequest'ten önce, web sayfaları içeriği güncellemek için <meta http-equiv="refresh"> veya periyodik iframe yeniden yükleme kullanıyordu. 2005 yılında AJAX (Asynchronous JavaScript and XML) teknolojisinin ortaya çıkmasıyla Short Polling, sayfayı tamamen yeniden yüklemeden verileri güncellemek için standart yaklaşım haline geldi.
Short Polling mimarisi üç bileşen içerir: istemci zamanlayıcısı, HTTP isteği ve sunucu işleyicisi. İstemci bir aralık zamanlayıcısı başlatır ve her tetiklendiğinde sunucuya bir GET isteği gönderilir. Sunucu bir veritabanını veya başka bir kaynağı sorgular, bir yanıt oluşturur ve hemen istemciye döndürür. İstemci arayüzü günceller ve bir sonraki zamanlayıcı tetiklenmesini bekler. Bu döngü, uygulama etkin olduğu sürece süresiz olarak tekrarlanır.
Short Polling'in ana sorunu kaçınılmaz boş isteklerdir. Veriler nadiren değişiyorsa, çoğu istek "değişiklik yok" sonucu döndürerek ağ bant genişliğini ve işlemci süresini boşa harcar. 5 saniyelik polling aralığıyla 10.000 istemci olduğunda, sunucu saniyede 2.000 istek alır — bunun önemli bir kısmı, güncelleme sıklığı dakikada 1 olay ise işe yaramaz.
Short Polling basit bir döngüyle çalışır: istemci belirli bir süreyle (örneğin, 5000 ms) bir aralık zamanlayıcısı ayarlar. Her zamanlayıcı tetiklenmesinde, istemci sunucu uç noktasına genellikle son güncellemenin zaman damgası parametresiyle birlikte bir HTTP GET isteği oluşturur. Sunucu isteği alır, belirtilen zaman damgasından sonra yeni veri olup olmadığını kontrol eder ve bir yanıt döndürür — ya yeni verilerle ya da güncelleme olmadığına dair bir göstergeyle.
Short Polling yapılandırmasının kritik bir parametresi polling aralığıdır. Çok kısa aralık (3 saniyeden az) sunucu ve ağ üzerinde yüksek yük oluşturur. Çok uzun aralık (30 saniyeden fazla) veri güncelliğini azaltır. Optimum aralık senaryoya bağlıdır: izleme panoları için — 5–15 saniye, haber akışları için — 30–60 saniye, kritik uyarılar için — 1–3 saniye. Aralık seçimi her zaman veri güncelliği ile altyapı yükü arasında bir dengedir.
Boşta kalma süresince yükü azaltmak için uyarlanabilir aralık kullanılır: art arda birkaç istek boş sonuç döndürürse, aralık artar (örneğin, 5'ten 15 saniyeye). Yeni veri göründüğünde, aralık minimum değere sıfırlanır. Üstel geri çekilme (exponential backoff) algoritması, seyrek güncellemeler sırasında boş istek sayısını 3–5 kat azaltabilir.
Şimdi setInterval ve Fetch API kullanan istemci tarafı Short Polling uygulamasına bakalım. İşlev, uç nokta URL'sini ve milisaniye cinsinden polling aralığını alır.
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("Alındı", data.updates.length, "updates");
}
} catch (error) {
console.error("Polling başarısız:", error);
}
}, intervalMs);
return timerId;
}
const timer = startPolling("/api/updates", 5000);
// clearInterval(timer) durdurmak için
Kod, 5 saniyelik bir polling aralığı oluşturur ve son güncellemenin zaman damgasını sunucuya iletir. Sunucu, verileri filtrelemek ve yalnızca yeni kayıtları döndürmek için bu parametreyi kullanarak iletilen bilgi miktarını azaltabilir. İşlev, polling'i durdurma olanağı için zamanlayıcı tanımlayıcısını döndürür.
Short Polling için sunucu tarafı uygulaması son derece basittir — GET isteklerini kabul eden ve mevcut durumu veya belirtilen zaman damgasından sonra değiştirilen verileri içeren bir JSON yanıtı döndüren sıradan bir REST uç noktasıdır.
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);
Sunucu since parametresini alır ve zaman damgası belirtilen değeri aşan kayıtları filtreler. Bu yaklaşım, her yanıttaki veri miktarını en aza indirir ve yalnızca artımlı değişiklikleri döndürür. Yeni veri olmadığında, sunucu boş bir dizi döndürür ve istemci planlanan programa göre polling'e devam eder.
Short Polling ve Long Polling aynı sorunu çözer — verilerin sunucudan istemciye iletilmesi — ancak verimlilik açısından kökten farklıdır. Short Polling sabit istek aralığı kullanarak öngörülebilir yük oluştururken, Long Polling bir olay oluşana kadar bağlantıyı açık tutarak boş yanıt sayısını en aza indirir.
| Kriter | Short Polling | Long Polling |
|---|---|---|
| Uygulama karmaşıklığı | Düşük, standart REST | Orta, asenkron işleme |
| Güncelleme gecikmesi | Sabit, N saniyeye kadar | Minimum, olay oluştuğunda |
| İstek sayısı | Sabit, dakikada N istek | Olay bazlı, genellikle çok daha az |
| Sunucu yükü | Kısa aralıkta yüksek | Bağlantı tutma, asenkron işleme |
| Boşta trafik | Maksimum, her istek başlıklarla | Minimum, bir açık bağlantı |
| Ölçeklenebilirlik | Basit, durumsuz istekler | Karmaşık, paylaşılan olay kuyruğu gerekir |
Teknikler arasındaki seçim, verilerin güncelleme sıklığına bağlıdır. Olaylar her 10 saniyede bir defadan daha sık meydana geliyorsa — her iki yaklaşım da karşılaştırılabilir yük oluşturur ve Short Polling daha basit olabilir. Olaylar seyrekse (değişiklikler arasında saatler veya dakikalar) — Long Polling tercih edilir çünkü boş istek oluşturmaz. Ara senaryolar için seçim, altyapı kısıtlamalarına ve WebSocket kullanma olasılığına bağlıdır.
Short Polling, veri güncelliği gereksinimlerinin düşük olduğu ve uygulama basitliğinin verimliliğe göre öncelikli olduğu senaryolarda kullanılır. En tipik durumlar, iç yönetim panelleri, düşük uyarı sıklığına sahip izleme sistemleri ve 15–30 saniyelik gecikmenin kabul edilebilir olduğu uygulamalardır.
Önemli sınırlama — Short Polling, 1 saniyelik gecikmenin bile kabul edilemez olduğu zaman kritik uygulamalar (işlem terminalleri, acil uyarı sistemleri) için uygun değildir. Bu tür senaryolarda WebSocket, Server-Sent Events veya Long Polling kullanılmalıdır. Short Polling ile bir sistem tasarlarken, istek bütçesi hesaplanmalıdır: 5 saniye aralıkla 1.000 istemci olduğunda, sunucu dakikada 12.000 istek işler ve bu da karşılık gelen bir kaynak tabanı gerektirir.
Sıkça Sorulan Sorular
Short Polling, bir uygulamanın her N saniyede sunucuya "yeni veri var mı?" diye sorması ve sunucunun hiçbir şey değişmemiş olsa bile her seferinde yanıt vermesidir. Bu, yeni posta gelip gelmediğini kontrol etmek için her 5 dakikada bir posta kutunuza gitmek gibidir.
Optimum Short Polling aralığı senaryoya bağlıdır: izleme panoları için 5–10 saniye, haber akışları için 15–30 saniye, durum sayfaları için 30–60 saniye. Aralık, veri güncelliği ile sunucu yükü arasında bir uzlaşma olmalıdır. 10 saniyeden başlayın ve test sonuçlarına göre ayarlayın.
Short Polling — istemci sabit aralıkla sürekli sunucuyu yoklar. Long Polling — istemci bir istek yapar ve sunucu veri gelene kadar onu açık tutar. Short Polling uygulaması daha basittir ancak seyrek güncellemelerde daha fazla boş istek oluşturur.
Short Polling, WebSocket'ten daha basit uygulanır ve özel bir protokol gerektirmez — normal HTTP istekleriyle çalışır. Short Polling, 10–30 saniyelik gecikmenin kabul edilebilir olduğu ve WebSocket'i destekleme altyapı maliyetlerinin haklı olmadığı basit iç sistemler için uygundur.
Uyarlanabilir aralık kullanın: güncelleme olmadığında, istekler arasındaki bekleme süresini 2–3 kat artırın. Sunucunun yalnızca artımlı değişiklikleri döndürmesi için son isteğin zaman damgasıyla birlikte since parametresini ekleyin. Arka uç yükünü azaltmak için CDN veya proxy sunucu tarafında yanıtları önbelleğe alın.
Özet
setInterval veya özyinelemeli setTimeout ile sabit veya uyarlanabilir aralıkta döngüsel polling.Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.