Real-time Architecture

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) আর্কিটেকচার ব্যাকএন্ডে ব্যবহার করতে হবে।