Socket.IO এ Custom Reconnection Logic তৈরি করার মাধ্যমে আপনি রিয়েল-টাইম অ্যাপ্লিকেশনে পুনঃসংযোগের সময় উপযুক্ত পদক্ষেপ নিতে পারেন। বিশেষ করে, reconnect_attempt ইভেন্ট ব্যবহার করে আপনি পুনঃসংযোগের চেষ্টা ট্র্যাক করতে এবং ক্লায়েন্টের পুনঃসংযোগ লজিক কাস্টমাইজ করতে পারবেন। এটি বিশেষভাবে উপকারী যখন আপনি পুনঃসংযোগের জন্য একাধিক চেষ্টা এবং দেরি কাস্টমাইজ করতে চান।
এই টিউটোরিয়ালে, আমরা reconnect_attempt ইভেন্ট এবং কাস্টম পুনঃসংযোগ লজিক ব্যবহার করে একটি উদাহরণ তৈরি করব।
Socket.IO তে reconnect_attempt ইভেন্ট
reconnect_attempt ইভেন্টটি তখন ট্রিগার হয় যখন Socket.IO ক্লায়েন্ট স্বয়ংক্রিয়ভাবে পুনঃসংযোগের চেষ্টা করে। এটি প্রতি পুনঃসংযোগের চেষ্টা হওয়ার সময় কল হয়, এবং আপনি এখানে কাস্টম লজিক প্রয়োগ করতে পারেন।
1. reconnect_attempt ইভেন্ট কিভাবে কাজ করে?
এই ইভেন্টটি ব্যবহার করে, আপনি ক্লায়েন্টের পুনঃসংযোগের প্রয়াসের সংখ্যা এবং সময় নির্ধারণ করতে পারেন, এবং এটি UI-তে ব্যবহারকারীকে জানাতে সহায়ক হতে পারে। আপনি পুনঃসংযোগের প্রক্রিয়ায় কিছু পরিবর্তনও করতে পারেন।
Client-Side: reconnect_attempt Example
const socket = io({
reconnection: true, // পুনঃসংযোগ সক্ষম
reconnectionAttempts: 5, // সর্বাধিক পুনঃসংযোগের সংখ্যা
reconnectionDelay: 1000, // ১ সেকেন্ড দেরিতে পুনঃসংযোগের চেষ্টা
reconnectionDelayMax: 5000, // সর্বাধিক ৫ সেকেন্ড দেরি
timeout: 20000 // সার্ভারের সাথে সংযোগ করতে সর্বোচ্চ ২০ সেকেন্ড
});
// reconnect_attempt ইভেন্ট হ্যান্ডলিং
socket.on('reconnect_attempt', (attemptNumber) => {
console.log(`Attempting to reconnect, attempt number: ${attemptNumber}`);
// UI-তে ইউজারকে জানান যে পুনঃসংযোগ হচ্ছে
document.getElementById('status').textContent = `Reconnecting... Attempt ${attemptNumber}`;
});
// পুনঃসংযোগ সফল হলে
socket.on('reconnect', () => {
console.log('Successfully reconnected');
document.getElementById('status').textContent = 'Reconnected successfully!';
});
// পুনঃসংযোগ ব্যর্থ হলে
socket.on('reconnect_failed', () => {
console.log('Reconnection failed');
document.getElementById('status').textContent = 'Reconnection failed. Please try again later.';
});
// সংযোগ বিচ্ছিন্ন হলে
socket.on('disconnect', () => {
console.log('Disconnected from server');
document.getElementById('status').textContent = 'Disconnected. Trying to reconnect...';
});ব্যাখ্যা:
- reconnection: এই অপশনটি পুনঃসংযোগ সক্ষম করবে।
- reconnectionAttempts: সর্বাধিক পুনঃসংযোগের সংখ্যা। যদি নির্ধারিত সংখ্যক চেষ্টা শেষ হয়ে যায়, তবে পুনঃসংযোগ বন্ধ হয়ে যাবে।
- reconnectionDelay: প্রথম পুনঃসংযোগের জন্য দেরি (1000 মিলিসেকেন্ড = 1 সেকেন্ড)।
- reconnectionDelayMax: পুনঃসংযোগের সর্বাধিক দেরি। পরে পুনঃসংযোগের দেরি বাড়ানো হবে, তবে এটি ৫ সেকেন্ডের বেশি হবে না।
- timeout: সার্ভারের সাথে সংযোগ স্থাপন করার জন্য সর্বোচ্চ সময় ২০ সেকেন্ড।
reconnect_attempt ইভেন্টে প্রতিটি পুনঃসংযোগের চেষ্টা শুরু হওয়ার সাথে সাথেই এটিকে ট্র্যাক করা যায় এবং UI তে ব্যবহারকারীকে জানানো যায়।
2. Server-Side: reconnect_attempt Event Handling
Socket.IO সার্ভার সাইডে reconnect_attempt ইভেন্টে কোনও কাস্টম কার্যকলাপ প্রয়োগ করা হয় না, কারণ এটি ক্লায়েন্ট সাইডের একটি ইভেন্ট। তবে, আপনি connect এবং disconnect ইভেন্ট হ্যান্ডলিং করে ব্যবহারকারীর সংযোগের অবস্থা ট্র্যাক করতে পারেন।
Server-Side Example (Socket.IO)
const io = require('socket.io')(3000);
io.on('connection', (socket) => {
console.log('A user connected');
// পুনঃসংযোগ সফল হলে
socket.on('reconnect', (attemptNumber) => {
console.log(`User reconnected on attempt ${attemptNumber}`);
});
// ডিসকানেক্ট হওয়ার সময়
socket.on('disconnect', () => {
console.log('User disconnected');
});
});এখানে, আপনি connect এবং disconnect ইভেন্টের মাধ্যমে সার্ভার সাইডে ব্যবহারকারীর সংযোগ এবং বিচ্ছিন্নতার লগ দেখতে পারেন, তবে reconnect ইভেন্টটি ক্লায়েন্ট সাইডে হ্যান্ডল করা হয়।
3. কাস্টম পুনঃসংযোগ লজিক (Custom Reconnection Logic)
আপনি reconnect_attempt ইভেন্টের মাধ্যমে কাস্টম পুনঃসংযোগ লজিক তৈরি করতে পারেন। উদাহরণস্বরূপ, যদি সার্ভারটি কিছু সময়ের জন্য বন্ধ থাকে, তাহলে আপনি পুনঃসংযোগের জন্য দেরি বাড়াতে পারেন বা নির্দিষ্ট সংখ্যক চেষ্টা পর নির্দিষ্ট একশন নিতে পারেন।
Client-Side Example: Custom Reconnection Logic
const socket = io({
reconnection: true,
reconnectionAttempts: 5, // সর্বাধিক ৫ বার পুনঃসংযোগের চেষ্টা
reconnectionDelay: 3000, // পুনঃসংযোগের জন্য ৩ সেকেন্ডের দেরি
reconnectionDelayMax: 10000, // সর্বাধিক ১০ সেকেন্ড দেরি
});
let attemptCounter = 0;
// reconnect_attempt ইভেন্ট হ্যান্ডলিং
socket.on('reconnect_attempt', () => {
attemptCounter++;
console.log(`Attempt ${attemptCounter} to reconnect...`);
// যদি পুনঃসংযোগের সংখ্যা ৩ ছাড়িয়ে যায়, তাহলে কিছু সময় বিরতি নিন
if (attemptCounter > 3) {
socket.io.opts.reconnectionDelay = 5000; // পুনঃসংযোগের দেরি বাড়ানো
console.log('Increasing reconnection delay to 5 seconds');
}
});
// পুনঃসংযোগ সফল হলে
socket.on('reconnect', () => {
console.log('Successfully reconnected');
attemptCounter = 0; // পুনঃসংযোগ সফল হলে কাউন্টার রিসেট করা
});এখানে, attemptCounter ব্যবহার করে পুনঃসংযোগের সংখ্যা ট্র্যাক করা হচ্ছে। যদি এটি ৩টি চেষ্টার পর পৌঁছায়, তাহলে পুনঃসংযোগের দেরি ৫ সেকেন্ডে বাড়িয়ে দেওয়া হচ্ছে। এটা ইউজারের জন্য একটি কাস্টম কৌশল হয়ে দাঁড়ায়।
4. User Notification During Reconnection
পুনঃসংযোগের সময় ব্যবহারকারীকে জানানো গুরুত্বপূর্ণ, যাতে তারা বুঝতে পারে যে তারা সংযোগের বাইরে আছেন এবং পুনঃসংযোগের চেষ্টা চলছে। এই জন্য আপনি UI notification বা alert message ব্যবহার করতে পারেন।
UI Notification Example
socket.on('reconnect_attempt', (attemptNumber) => {
console.log(`Attempting to reconnect... Attempt number: ${attemptNumber}`);
document.getElementById('status').textContent = `Reconnecting... Attempt ${attemptNumber}`;
});
socket.on('reconnect', () => {
console.log('Reconnected successfully!');
document.getElementById('status').textContent = 'Reconnected successfully!';
});
socket.on('reconnect_failed', () => {
console.log('Reconnection failed');
document.getElementById('status').textContent = 'Reconnection failed. Please try again later.';
});এখানে, ব্যবহারকারীকে status এলিমেন্টে পুনঃসংযোগের চেষ্টা এবং সফল বা ব্যর্থ হওয়া সম্পর্কে তথ্য দেখানো হচ্ছে।
সারসংক্ষেপ
- reconnect_attempt ইভেন্ট Socket.IO-তে পুনঃসংযোগের চেষ্টা ট্র্যাক করতে ব্যবহৃত হয়। এটি ক্লায়েন্ট সাইডে পুনঃসংযোগের চেষ্টা এবং তার ফলাফল জানাতে সহায়ক।
- Automatic Reconnection: Socket.IO ক্লায়েন্ট স্বয়ংক্রিয়ভাবে পুনঃসংযোগের চেষ্টা করে। তবে, এই আচরণ কাস্টমাইজ করা যায়
reconnection,reconnectionAttempts,reconnectionDelayএর মাধ্যমে। - Custom Reconnection Logic: পুনঃসংযোগের সময় কাস্টম লজিক তৈরি করা সম্ভব, যেমন পুনঃসংযোগের সংখ্যা বাড়ানোর পরে দেরি বৃদ্ধি করা।
- User Notification: পুনঃসংযোগের সময় ব্যবহারকারীকে অবহিত করা উচিত, যাতে তারা বুঝতে পারে যে সার্ভারের সাথে সংযোগ পুনঃস্থাপন করা হচ্ছে।
এই কৌশলগুলি Socket.IO অ্যাপ্লিকেশনগুলিকে আরো স্থিতিশীল এবং ব্যবহারকারী বান্ধব করে তোলে।
Read more