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 دقیقه به جعبه پستی نزدیک شوید تا ببینید آیا نامه جدیدی رسیده است.
فاصله بهینه 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 از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.