Real-Time Engine: Building Bi-Directional APIs with WebSockets and Node.js
ট্রেডিশনাল HTTP রিকোয়েস্টে ক্লায়েন্টকে বারবার সার্ভার থেকে ডেটা চেয়ে রিকোয়েস্ট পাঠাতে হয় (Polling), যা লাইভ চ্যাট অ্যাপ্লিকেশন বা রিয়েল-টাইম ড্যাশবোর্ডের জন্য অত্যন্ত ধীরগতির। এই আর্কিটেকচারাল সীমাবদ্ধতা দূর করতে আমরা ব্যবহার করি **WebSockets**। এটি ক্লায়েন্ট এবং সার্ভারের মধ্যে একটি সিঙ্গেল, পারসিস্টেন্ট TCP কানেকশন তৈরি করে ফুল-ডুপ্লেক্স (Bi-directional) যোগাযোগ স্থাপন করে।
নিচে আমরা নেটিভ নোড ডিরেক্টরিতে অত্যন্ত লাইটওয়েট ও ফাস্ট ws লাইব্রেরি ব্যবহার করে একটি ব্যাকএন্ড গেটওয়ে ইঞ্জিন তৈরি করা শিখবো।
১. লাইব্রেরি ইনস্টলেশন
আপনার প্রোজেক্ট ফোল্ডারে টার্মিনাল থেকে নিচের মডিউলটি ইনস্টল করুন:
npm install ws
ধাপ ২: সার্ভার লজিক কনফিগারেশন (`server.js`)
কানেক্টেড ইউজারদের ট্র্যাকিং রাখা এবং ব্রডকাস্ট মেসেজিং হ্যান্ডেল করার মূল কোড স্ট্রাকচার:
const { WebSocketServer } = require('ws');
// পোর্ট ৮০৮০ তে নতুন ডাব্লিউএস কন্সোল ওপেন করা
const wss = new WebSocketServer({ port: 8080 });
console.log("[+] Real-time WebSockets Server initiated on port 8080");
wss.on('connection', (ws, request) => {
const clientIp = request.socket.remoteAddress;
console.log(`[+] New WebSocket tunnel established from IP: ${clientIp}`);
// ক্লায়েন্টের কাছ থেকে ডেটা রিসিভ করা
ws.on('message', (rawPayload) => {
console.log(`Received stream: ${rawPayload}`);
// সমস্ত একটিভ কানেকশনে মেসেজটি ব্রডকাস্ট (সংবহন) করা
wss.clients.forEach((client) => {
if (client.readyState === 1) { // 1 means OPEN state
client.send(`Server Broadcast: ${rawPayload}`);
}
});
});
// কানেকশন ক্লোজ ইভেন্ট হ্যান্ডেল
ws.on('close', () => {
console.log("[-] Client disconnected from tunnel.");
});
});
ধাপ ৩: ফ্রন্টএন্ড ক্লায়েন্ট ইনটিগ্রেশন
আপনার ব্রাউজার বা ক্লায়েন্ট সাইড স্ক্রিপ্ট থেকে এই সার্ভারের সাথে যেভাবে কানেক্ট করবেন:
const socket = new WebSocket('ws://localhost:8080');
socket.onopen = () => {
console.log('[+] Connected to backend WebSocket Engine');
socket.send('Hello System Server!');
};
socket.onmessage = (event) => {
console.log('Live Payload received: ', event.data);
};
স্কেলিং নোট: যখন আপনার চ্যাট অ্যাপে হাজার হাজার লাইভ ইউজার যুক্ত হবে, তখন একটি মাত্র নোড সার্ভার র্যাম ক্র্যাশ করতে পারে। প্রোডাকশনে হাই স্কেলিং এর জন্য আপনাকে রেডিস পাব-সাব (Redis Pub/Sub) আর্কিটেকচার ব্যাকএন্ডে ব্যবহার করতে হবে।