استفسار کوتاه: چیست، چگونه کار می‌کند و کجا استفاده می‌شود

نویسنده: IT Sectr منتشر شده: 2026-06-02 زمان مطالعه: 8 دقیقه

Short Polling — این یک تکنیک تعامل کلینت و سرور است که در آن کلینت درخواست‌های HTTP را در فاصله‌های زمانی ثابت برای دریافت داده‌های به‌روزشده ارسال می‌کند. سرور هر درخواست را بلافاصله پردازش کرده و وضعیت فعلی را حتی در صورت عدم تغییر بازمی‌گرداند. به گزارش Amazon Web Services, 2024، Short Polling ساده‌ترین روش برای پیاده‌سازی است اما کم‌بیشترین روش کارآمد استفسار، که بار اضافی بر سرور و شبکه ایجاد می‌کند.

نکات کلیدی

  • Short Polling — تکنیکی که در آن کلینت درخواست‌های HTTP را در فاصله‌های ثابت بدون توجه به ظهور داده‌ها ارسال می‌کند.
  • اصل — کلینت با تایمر از سرور استفسار می‌کند، سرور وضعیت فعلی را حتی اگر تغییر نکرده باشد بلافاصله بازمی‌گرداند.
  • سادگی — پیاده‌سازی نیازی به پردازش ناهمگام در سرور ندارد، و یک REST endpoint ساده کافی است.
  • معیب — ترافیک اضافی در صورت عدم به‌روزرسانی: هر درخواست شامل هدرهای کامل HTTP و پردازش در سرور است.
  • کاربرد — داشبوردهای ساده، نظارت با فرکانس پایین استفسار و سیستم‌های داخلی بدون نیاز به زمان واقعی.

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

معماری Short Polling شامل سه مولفه است: تایمر کلینت، درخواست HTTP و پردازنده سرور. کلینت یک تایمر فاصله‌ای را راه‌اندازی می‌کند که با فعال‌شدن آن، یک درخواست GET به سرور ارسال می‌شود. سرور یک پرس‌وجو به پایگاه داده یا منبع دیگر انجام می‌دهد، پاسخ را تهیه و بلافاصله به کلینت بازمی‌گرداند. کلینت رابط را به‌روز کرده و منتظر فعال‌شدن بعدی تایمر می‌ماند. این چرخه تا زمانی که برنامه فعال است به‌طور بی‌نهایت تکرار می‌شود.

مشکل درخواست‌های اضافی

مشکل اصلی Short Polling — درخواست‌های خالی حتمی است. اگر داده‌ها به‌ندرت تغییر کنند، اکثر درخواست‌ها نتیجه «بدون تغییر» را بازمی‌گردانند و پهنای باند شبکه و زمان پردازنده را برای پردازش هدر می‌دهند. با 10 000 کلینت و فاصله استفسار 5 ثانیه، سرور در ثانیه 2 000 درخواست دریافت می‌کند — که بخش قابل توجهی آنها اگر فرکانس به‌روزرسانی 1 رویداد در دقیقه باشد بی‌فائده است.

Short Polling چگونه کار می‌کند

Short Polling بر اساس یک چرخه ساده کار می‌کند: کلینت یک تایمر فاصله‌ای با دوره مشخص (مثلاً 5000 میلی‌ثانیه) تنظیم می‌کند. در هر فعال‌شدن تایمر، کلینت یک درخواست HTTP GET به نقطه پایانی سرور، معمولاً با پارامتر نشانگر زمان آخرین به‌روزرسانی، ایجاد می‌کند. سرور درخواست را دریافت کرده، وجود داده‌های جدید پس از نشانگر مشخصشده را بررسی کرده و پاسخ را بازمی‌گرداند — یا با داده‌های جدید و یا با نشانگر عدم وجود به‌روزرسانی.

پارامتر حیاتی پیکربندی Short Polling — فاصله استفسار است. فاصله خیلی کوتاه (کمتر از 3 ثانیه) بار سنگینی بر سرور و شبکه ایجاد می‌کند. فاصله خیلی طولانی (بیش از 30 ثانیه) به‌روزی داده‌ها را کاهش می‌دهد. فاصله بهینه به سناریو بستگی دارد: برای پانل‌های نظارت — 5–15 ثانیه، برای خبرها — 30–60 ثانیه، برای هشدارهای حریج — 1–3 ثانیه. انتخاب فاصله همواره یک توافق بین به‌روزی داده‌ها و بار زیرساخت است.

فاصله استفسار تطبیقی

برای کاهش بار در زمان خلوت، از فاصله تطبیقی استفاده می‌شود: اگر چند درخواست متوالی نتیجه خالی بازگردانند، فاصله افزایش می‌یابد (مثلاً از 5 به 15 ثانیه). در صورت ظهور داده‌های جدید، فاصله به حداقل مقدار بازگشت می‌شود. الگوریتم تاخیر نمایی (exponential backoff) به شما امکان می‌دهد تعداد درخواست‌های خالی را در به‌روزرسانی‌های نادر 3–5 برابر کاهش دهید.

مثال پیاده‌سازی Short Polling در JavaScript

پیاده‌سازی طرف کلینت Short Polling با استفاده از setInterval و Fetch API را در نظر بگیرید. تابع URL نقطه پایانی و فاصله استفسار را به میلی‌ثانیه می‌پذیرد.

js
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

پیاده‌سازی طرف سرور برای Short Polling بسیار ساده است — این یک REST endpoint عادی است که درخواست‌های GET را پذیرفته و پاسخ JSON را با وضعیت فعلی یا داده‌هایی که پس از نشانگر مشخصشده تغییر کرده‌اند بازمی‌گرداند.

js
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 اتصال را تا ظهور رویداد نگه می‌دارد و تعداد پاسخ‌های خالی را به حداقل می‌رساند.

معیارShort PollingLong Polling
سختی پیاده‌سازیپایین، REST استانداردمتوسط، پردازش ناهمگام
تاخیر به‌روزرسانیثابت، تا N ثانیهحداقل، در زمان رویداد
تعداد درخواست‌هاثابت، N درخواست در دقیقهبر اساس رویداد، معمولاً خیلی کمتر
بار سروربالا در فاصله کوتاهنگه‌داشتن اتصال‌ها، پردازش ناهمگام
ترافیک در زمان خلوتحداکثر، هر درخواست با هدرهاحداقل، یک اتصال باز
مقیاس‌پذیریساده، درخواست‌های بدون وضعیتپیچیده، صف رویداد مشترک مورد نیاز است

انتخاب بین تکنیک‌ها به فرکانس به‌روزرسانی داده‌ها بستگی دارد. اگر رویدادها بیش از هر 10 ثانیه یک بار رخ می‌دهند — هر دو روش بار مقایسۀ ایجاد می‌کنند و Short Polling ممکن است ساده‌تر باشد. اگر رویدادها نادر هستند (ساعت‌ها یا دقایق بین تغییرات) — Long Polling اولویت دارد، زیرا درخواست‌های خالی ایجاد نمی‌کند. برای سناریوهای میانی، انتخاب به محدودیت‌های زیرساختی و امکان استفاده از WebSocket بستگی دارد.

وقتی از Short Polling استفاده می‌شود

Short Polling در سناریوهایی استفاده می‌شود که نیازهای به‌روزرسانی داده‌ها پایین است و سادگی پیاده‌سازی بر کارآیی اولویت دارد. معمولی‌ترین موارد شامل پانل‌های مدیریتی داخلی، سیستم‌های نظارت با فرکانس پایین هشدار و برنامه‌هایی است که تاخیر 15–30 ثانیه در آنها قابل قبول است.

  • پانل‌های نظارت — پانلهایی با متریک‌هایی که هر 10–30 ثانیه یک بار به‌روز می‌شوند و نیازی به واکنش فوری ندارند.
  • صفحات وضعیت — صفحات بررسی دسترسی خدمات، که داده‌ها هر 30–60 ثانیه به‌روز شده و تاخیر کریتیکال نیست.
  • گزارش‌های تحلیلی — سیستم‌های تحلیل داخلی با جمع‌آوری دوره‌ای داده‌ها، که به‌روزی تا 1 دقیقه مقبول است.
  • بازی‌های ساده — بازی‌های چند نفره نوبتی بدون نیاز به زمان واقعی، که نوبت هر چند ثانیه یک بار به‌روز می‌شود.
  • آزمایش — سناریوهای آزمایش بار و اشکال‌زدایی، که Short Polling به عنوان روش مرجع استفسار برای مقایسه با سایر تکنیک‌ها استفاده می‌شود.

مهدودیت مهم — Short Polling برای برنامه‌های حساس به زمان (ترمینال‌های معاملاتی، سیستم‌های هشدار ضروری) مناسب نیست، که در آنها تاخیر حتی 1 ثانیه نیز غیرقابل قبول است. در چنین سناریوهایی باید از WebSocket، Server-Sent Events یا Long Polling استفاده کرد. در طراحی سیستم با Short Polling، باید بودجه درخواست‌ها را محاسبه کرد: با 1 000 کلینت و فاصله 5 ثانیه، سرور در دقیقه 12 000 درخواست را پردازش می‌کند، که نیازمند پایگاه منابع مناسب است.

سوالات متداول

Short Polling به زبان ساده چیست؟

Short Polling — وقتی است که برنامه هر N ثانیه از سرور می‌پرسد: «داده جدید هست؟»، و سرور هر دفعه پاسخ می‌دهد، حتی اگر چیزی تغییر نکرده باشد. این مانند این است که هر 5 دقیقه به جعبه پستی نزدیک شوید تا ببینید آیا نامه جدیدی رسیده است.

چه فاصله استفساری برای Short Polling انتخاب کنیم؟

فاصله بهینه Short Polling به سناریو بستگی دارد: 5–10 ثانیه برای پانل‌های نظارت، 15–30 ثانیه برای خبرها، 30–60 ثانیه برای صفحات وضعیت. فاصله باید توافقی بین به‌روزی داده‌ها و بار سرور باشد. از 10 ثانیه شروع کنید و بر اساس نتایج آزمایش تنظیم کنید.

Short Polling چه تفاوتی با Long Polling دارد؟

Short Polling — کلینت مداوم سرور را با فاصله ثابت «کشش» می‌کند. Long Polling — کلینت یک درخواست می‌فرستد و سرور آن را تا ظهور داده‌ها باز نگه می‌دارد. Short Polling پیاده‌سازی ساده‌تری دارد، اما در به‌روزرسانی‌های نادر درخواست‌های خالی بیشتری ایجاد می‌کند.

کی Short Polling از WebSocket بهتر است؟

Short Polling نسبت به WebSocket ساده‌تر است و به پروتکل ویژه‌ای نیاز ندارد — از طریق درخواست‌های عادی HTTP کار می‌کند. Short Polling برای سیستم‌های ساده داخلی که تاخیر 10–30 ثانیه مقبول است موجه است، و هزینه‌های زیرساختی پشتیبانی از WebSocket ناموجه است.

چگونه بار سرور را از Short Polling کاهش دهیم؟

از فاصله تطبیقی استفاده کنید: در صورت عدم وجود به‌روزرسانی، فاصله بین درخواست‌ها را 2–3 برابر افزایش دهید. پارامتر since را با نشانگر زمان آخرین درخواست اضافه کنید تا سرور تنها تغییرات افزایشی را بازگرداند. پاسخ‌ها را در طرف CDN یا پروکسی سرور برای کاهش بار بکاند کنید.

نتیجه‌گیری

  • Short Polling — تکنیک استفسار سرور با فاصله ثابت که در آن کلینت درخواست‌های HTTP را بدون توجه به ظهور داده‌های جدید از طریق تایمر ارسال می‌کند.
  • اصل — استفسار چرخشی از طریق setInterval یا setTimeout بازگشتی با فاصله ثابت یا تطبیقی.
  • مزیت — حداکثر سادگی در پیاده‌سازی و اشکال‌زدایی، نیازی به پردازش ناهمگام در سرور و پروتکل‌های ویژه ندارد.
  • معیب — ترافیک اضافی در به‌روزرسانی‌های نادر: درخواست‌های خالی با هدرهای کامل HTTP بار بی‌فائده ایجاد می‌کنند.
  • فاصله بهینه — 5–15 ثانیه برای نظارت، 15–60 ثانیه برای داده‌های با فرکانس تغییر پایین، 1–3 ثانیه برای سناریوهای حریج.
  • مقایسه — ساده‌تر از Long Polling اما در رویدادهای نادر کم‌تر موثر؛ از نظر عملکرد و تاخیر از WebSocket پایین‌تر است.
  • توصیه — از Short Polling تنها برای سیستم‌های ساده داخلی با نیازهای پایین به‌روزی داده‌ها یا به عنوان روش مرجع در آزمایش‌ها استفاده کنید.

ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد

IT Sectr از سال 2017 برنامه‌های iOS و Android را برای استارتاپ‌ها و کسب‌وکارها ایجاد می‌کند. ما به شما مشاوره می‌دهیم و بهترین راه‌حل را پیشنهاد خواهیم کرد.

بحث درباره پروژه

همچنین بخوانید