Custom Middleware তৈরি এবং Socket.IO তে ব্যবহার

Socket.IO এর মধ্যে Middleware (সোকেট.আইও তে মিডলওয়্যার) - সকেট.আইও (Socket.IO) - Computer Programming

272

Socket.IO তে middleware ব্যবহার করে আপনি কানেকশন পরিচালনা, ডেটা যাচাই, অথেনটিকেশন, লগিং, বা অন্যান্য কাস্টম লজিক ইনজেক্ট করতে পারেন। Socket.IO তে middleware এমন ফাংশন যা ইভেন্ট হ্যান্ডলিং এর আগে রান হয় এবং সার্ভারের সাথে ক্লায়েন্টের সংযোগ স্থাপনের সময় কাস্টম যাচাই বা প্রক্রিয়া সম্পাদন করতে সহায়তা করে।

এখানে, আমরা একটি custom middleware তৈরি করব এবং সেটি Socket.IO তে কিভাবে ব্যবহার করা যায় তা দেখব।


1. Socket.IO Middleware কী?

Socket.IO তে middleware হল এমন ফাংশন যা সার্ভারের সাথে ক্লায়েন্টের কানেকশন স্থাপন বা ইভেন্ট প্রসেসিং এর আগে রান হয়। এটি সাধারণত ক্লায়েন্ট থেকে আসা ডেটা যাচাই করতে বা অন্য কোনো প্রক্রিয়া করতে ব্যবহৃত হয়।

Socket.IO তে middleware মূলত io.use() এবং socket.use() এর মাধ্যমে ব্যবহৃত হয়।

  • io.use(): এটি সার্ভার-সর্বজনীন middleware হিসেবে কাজ করে এবং সব socket এর জন্য প্রযোজ্য হয়।
  • socket.use(): এটি শুধুমাত্র নির্দিষ্ট socket এর জন্য middleware হিসাবে ব্যবহৃত হয়।

2. Socket.IO Middleware তৈরি এবং ব্যবহার

2.1 Custom Middleware তৈরি করা

এখানে আমরা একটি কাস্টম middleware তৈরি করব যা authentication যাচাই করবে। ক্লায়েন্ট একটি JWT token পাঠাবে এবং সার্ভার সেটি যাচাই করে নিশ্চিত করবে যে ক্লায়েন্ট অনুমোদিত কি না।

2.2 Middleware কোড উদাহরণ (Node.js)

const http = require('http');
const socketIo = require('socket.io');
const jwt = require('jsonwebtoken');

// HTTP সার্ভার তৈরি
const server = http.createServer((req, res) => {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Socket.IO Server');
});

// Socket.IO সার্ভার তৈরি
const io = socketIo(server);

// Secret key (JWT token এর জন্য)
const SECRET_KEY = 'your_secret_key';

// Custom Middleware function: JWT validation
function authenticate(socket, next) {
  const token = socket.handshake.query.token;  // JWT token query থেকে নিতে হবে

  if (!token) {
    return next(new Error('Authentication error: No token provided')); // Token না থাকলে Error
  }

  // JWT token যাচাই করা
  jwt.verify(token, SECRET_KEY, (err, decoded) => {
    if (err) {
      return next(new Error('Authentication error: Invalid token'));  // Invalid token থাকলে Error
    }
    socket.user = decoded;  // Token সঠিক হলে decoded তথ্য socket এর সাথে যুক্ত করা
    next();  // middleware সফল হলে connection অনুমোদিত
  });
}

// Middleware সার্ভারে ব্যবহার করা (Global level)
io.use(authenticate);

// ক্লায়েন্ট কানেক্ট হলে
io.on('connection', (socket) => {
  console.log('A user connected with ID:', socket.id);
  console.log('Authenticated User:', socket.user);  // Authentication success হলে decoded user data

  socket.on('disconnect', () => {
    console.log('User disconnected');
  });
});

// সার্ভার 3000 পোর্টে চলবে
server.listen(3000, () => {
  console.log('Server running on http://localhost:3000');
});

এখানে, আমরা authenticate নামে একটি কাস্টম middleware তৈরি করেছি যা JWT token যাচাই করে। যদি token না থাকে বা তা অকার্যকর হয়, তবে ক্লায়েন্টের কানেকশন ব্যর্থ হয়ে যাবে। যদি token সঠিক হয়, তবে ক্লায়েন্টের তথ্য socket.user এ সংরক্ষিত হবে এবং next() কল হবে, যার মাধ্যমে কানেকশন অনুমোদিত হবে।


2.3 ক্লায়েন্ট সাইড (HTML + JavaScript)

ক্লায়েন্ট সাইডে, আমরা Socket.IO client ব্যবহার করে একটি JWT token পাঠাব এবং সার্ভার থেকে রেসপন্স গ্রহণ করব।

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Socket.IO JWT Authentication</title>
  <script src="/socket.io/socket.io.js"></script>
</head>
<body>
  <h1>Socket.IO JWT Authentication</h1>
  <div id="messages"></div>

  <script>
    // JWT Token (এটি সাধারণত সার্ভার থেকে ক্লায়েন্টকে পাঠানো হয়)
    const token = 'your_jwt_token_here'; // বাস্তব জীবনে এটি লগইন প্রক্রিয়া শেষে পাওয়া যাবে

    // সার্ভারের সাথে সংযোগ স্থাপন (Token পাঠানো)
    var socket = io('http://localhost:3000', {
      query: { token: token }  // Token এখানে query প্যারামিটার হিসেবে পাঠানো হচ্ছে
    });

    // সার্ভার থেকে রেসপন্স গ্রহণ
    socket.on('connect', function() {
      console.log('Connected to the server');
    });

    socket.on('disconnect', function() {
      console.log('Disconnected from the server');
    });

  </script>
</body>
</html>

এখানে, ক্লায়েন্ট token পাঠাচ্ছে সার্ভারে, এবং সার্ভার এই token যাচাই করে নিশ্চিত করে যে ক্লায়েন্ট অনুমোদিত। যদি token সঠিক হয়, তাহলে সার্ভার ক্লায়েন্টকে কানেকশন অনুমোদন করবে।


3. Socket.IO Middleware এর অন্যান্য ব্যবহার

3.1 Log Events (Logging Middleware)

function logConnection(socket, next) {
  console.log('A new connection established');
  next();  // Connection অনুমোদন
}

io.use(logConnection);  // Middleware হিসাবে ব্যবহার

এই middleware ক্লায়েন্ট কানেক্ট হওয়ার পর একটি লগ ইনপুট করবে, যা ট্রাবলশুটিং বা ম্যানেজমেন্টে সহায়তা করতে পারে।

3.2 Rate Limiting (Prevent Spam)

const rateLimit = {};

function rateLimiter(socket, next) {
  const userId = socket.id;
  const currentTime = Date.now();

  if (rateLimit[userId] && currentTime - rateLimit[userId] < 1000) {
    return next(new Error('Too many requests! Please try again later.'));
  }

  rateLimit[userId] = currentTime;
  next();
}

io.use(rateLimiter);  // Middleware হিসাবে ব্যবহার

এই middleware এক মিনিটের মধ্যে একটি ক্লায়েন্টের বেশি রিকোয়েস্ট ব্লক করবে, যা স্প্যাম বা অস্বাভাবিক ব্যবহারকে প্রতিরোধ করতে সাহায্য করবে।


সারসংক্ষেপ

  • Socket.IO Middleware হল এমন ফাংশন যা ক্লায়েন্টের সংযোগের পূর্বে চলতে পারে এবং এটি বিভিন্ন কাস্টম লজিক যেমন অথেনটিকেশন, লগিং, রেট লিমিটিং ইত্যাদি বাস্তবায়ন করতে ব্যবহৃত হয়।
  • io.use() এবং socket.use() এর মাধ্যমে middleware ব্যবহার করা হয়।
  • Custom Middleware তৈরি করে আপনি Socket.IO তে বিভিন্ন নিরাপত্তা বা কার্যকরী ব্যবস্থা অন্তর্ভুক্ত করতে পারেন।

এইভাবে Socket.IO তে custom middleware তৈরি করে আপনি রিয়েল-টাইম অ্যাপ্লিকেশনগুলির মধ্যে আরো নিরাপদ এবং কার্যকরী প্রক্রিয়া প্রয়োগ করতে পারেন।

Content added By
Promotion

Are you sure to start over?

Loading...