Short Polling হল একটি ক্লায়েন্ট-সার্ভার যোগাযোগ কৌশল যেখানে ক্লায়েন্ট আপডেটেড ডেটা পাওয়ার জন্য নির্দিষ্ট সময় অন্তর HTTP অনুরোধ পাঠায়। সার্ভার প্রতিটি অনুরোধ তৎক্ষণাৎ প্রক্রিয়া করে, এমনকি কিছু পরিবর্তন না হলেও বর্তমান অবস্থা ফেরত দেয়। Amazon Web Services, 2024 অনুসারে, Short Polling বাস্তবায়নে সবচেয়ে সহজ কিন্তু সবচেয়ে কম কার্যকর পোলিং পদ্ধতি, যা সার্ভার এবং নেটওয়ার্কে অতিরিক্ত লোড তৈরি করে।
মূল বিষয়
Short Polling একটি যোগাযোগ প্যাটার্ন যেখানে ক্লায়েন্ট পূর্বনির্ধারিত ব্যবধানে পর্যায়ক্রমে সার্ভারে HTTP অনুরোধ পাঠায়, এবং সার্ভার প্রতিটি অনুরোধ সিঙ্ক্রোনাসভাবে প্রক্রিয়া করে তাৎক্ষণিকভাবে ফলাফল ফেরত দেয়। পোলিং ব্যবধান ক্লায়েন্ট পাশে টাইমার ব্যবহার করে সেট করা হয় এবং ডেটা হালনাগাদ প্রয়োজনীয়তার উপর নির্ভর করে সাধারণত 1 থেকে 60 সেকেন্ড পর্যন্ত হয়ে থাকে।
Short Polling ঐতিহাসিকভাবে ওয়েব অ্যাপ্লিকেশনে রিয়েল-টাইম যোগাযোগ সংগঠিত করার প্রথম প্রক্রিয়া ছিল। 2000-এর দশকের শুরুতে, XMLHttpRequest-এর দ্বিতীয় প্রজন্মের আগে, ওয়েব পেজগুলি কন্টেন্ট আপডেট করার জন্য <meta http-equiv="refresh"> বা পর্যায়ক্রমিক iframe রিলোড ব্যবহার করত। 2005 সালে AJAX (Asynchronous JavaScript and XML) প্রযুক্তির আবির্ভাবের সাথে, Short Polling সম্পূর্ণ পৃষ্ঠা রিলোড ছাড়াই ডেটা আপডেট করার মানক পদ্ধতিতে পরিণত হয়।
Short Polling আর্কিটেকচারে তিনটি উপাদান রয়েছে: ক্লায়েন্ট টাইমার, HTTP অনুরোধ এবং সার্ভার হ্যান্ডলার। ক্লায়েন্ট একটি ব্যবধান টাইমার শুরু করে, যার প্রতিটি সক্রিয়করণে সার্ভারে GET অনুরোধ পাঠানো হয়। সার্ভার ডেটাবেস বা অন্য উৎস থেকে কোয়েরি করে, প্রতিক্রিয়া তৈরি করে এবং তাৎক্ষণিকভাবে ক্লায়েন্টে ফেরত দেয়। ক্লায়েন্ট ইন্টারফেস আপডেট করে এবং পরবর্তী টাইমার সক্রিয়করণের জন্য অপেক্ষা করে। অ্যাপ্লিকেশন সক্রিয় থাকাকালীন এই চক্র অনির্দিষ্টকাল ধরে চলতে থাকে।
Short Polling-এর প্রধান সমস্যা হল অনিবার্য খালি অনুরোধ। যদি ডেটা খুব কমই পরিবর্তিত হয়, তবে বেশিরভাগ অনুরোধ "কোনো পরিবর্তন নেই" ফলাফল ফেরত দেয়, নেটওয়ার্ক ব্যান্ডউইথ এবং প্রসেসিং CPU সময় নষ্ট করে। 5 সেকেন্ড পোলিং ব্যবধানে 10,000 ক্লায়েন্টের সাথে, সার্ভার প্রতি সেকেন্ডে 2,000 অনুরোধ গ্রহণ করে — যার একটি উল্লেখযোগ্য অংশ অকেজো যদি আপডেট ফ্রিকোয়েন্সি প্রতি মিনিটে 1 ঘটনা হয়।
Short Polling একটি সরল চক্রে কাজ করে: ক্লায়েন্ট একটি নির্দিষ্ট সময়সীমা (যেমন, 5000 ms) সহ একটি ব্যবধান টাইমার সেট করে। প্রতিটি টাইমার সক্রিয়করণে, ক্লায়েন্ট সার্ভার এন্ডপয়েন্টে HTTP GET অনুরোধ তৈরি করে, সাধারণত শেষ আপডেটের টাইমস্ট্যাম্প প্যারামিটার সহ। সার্ভার অনুরোধ গ্রহণ করে, নির্দিষ্ট টাইমস্ট্যাম্পের পরে নতুন ডেটা আছে কিনা পরীক্ষা করে এবং প্রতিক্রিয়া ফেরত দেয় — হয় নতুন ডেটা সহ অথবা কোনো আপডেট নেই এমন ইঙ্গিত সহ।
Short Polling কনফিগারেশনের একটি গুরুত্বপূর্ণ প্যারামিটার হল পোলিং ব্যবধান। খুব ছোট ব্যবধান (3 সেকেন্ডের কম) সার্ভার এবং নেটওয়ার্কে উচ্চ লোড তৈরি করে। খুব দীর্ঘ ব্যবধান (30 সেকেন্ডের বেশি) ডেটার হালনাগাদ হ্রাস করে। সর্বোত্তম ব্যবধান পরিস্থিতির উপর নির্ভর করে: মনিটরিং ড্যাশবোর্ডের জন্য — 5–15 সেকেন্ড, নিউজ ফিডের জন্য — 30–60 সেকেন্ড, জটিল অ্যালার্টের জন্য — 1–3 সেকেন্ড। ব্যবধান নির্বাচন সবসময় ডেটার হালনাগাদ এবং অবকাঠামো লোডের মধ্যে আপস।
নিষ্ক্রিয়তার সময় লোড কমাতে অভিযোজিত ব্যবধান ব্যবহার করা হয়: যদি ধারাবাহিকভাবে বেশ কয়েকটি অনুরোধ খালি ফলাফল ফেরত দেয়, তবে ব্যবধান বেড়ে যায় (যেমন, 5 থেকে 15 সেকেন্ড)। যখন নতুন ডেটা আসে, ব্যবধান সর্বনিম্ন মানে রিসেট হয়। এক্সপোনেনশিয়াল ব্যাকঅফ অ্যালগরিদম বিরল আপডেটের সময় খালি অনুরোধের সংখ্যা 3–5 গুণ কমাতে পারে।
আসুন setInterval এবং Fetch API ব্যবহার করে ক্লায়েন্ট-সাইড Short Polling বাস্তবায়ন দেখি। ফাংশনটি এন্ডপয়েন্ট 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 এন্ডপয়েন্ট যা 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 দিয়ে সিস্টেম ডিজাইন করার সময়, অনুরোধ বাজেট গণনা করা উচিত: 5 সেকেন্ড ব্যবধানে 1,000 ক্লায়েন্টের সাথে, সার্ভার প্রক্রিয়া করে প্রতি মিনিটে 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 অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।