Namespace Socket.IO-তে একটি কনসেপ্ট যা একাধিক "লোকাল কানেকশন" তৈরি করতে ব্যবহৃত হয়। এর মাধ্যমে আপনি একটি সার্ভারে একাধিক ইভেন্ট স্পেস তৈরি করতে পারেন, যেখানে প্রতিটি নেমস্পেস আলাদা ক্লায়েন্ট এবং সার্ভারের মধ্যে যোগাযোগ ব্যবস্থাপনা করে।
Socket.IO-তে Namespace এর ব্যবহারের মাধ্যমে আপনি একাধিক গ্রুপ বা রুম তৈরি করতে পারেন, যা বিভিন্ন ধরনের ডেটা বা ইভেন্টগুলোকে পৃথকভাবে পরিচালনা করার সুযোগ দেয়। এটি বিশেষভাবে দরকারি যখন আপনি একাধিক ধরণের রিয়েল-টাইম ইন্টারঅ্যাকশন পরিচালনা করছেন, যেমন চ্যাট রুম বা বিভিন্ন ধরনের লাইভ আপডেট।
Namespace এর সুবিধা
- বিভিন্ন চ্যাট রুম: আপনি বিভিন্ন চ্যাট রুম তৈরি করতে পারেন, যেখানে প্রতিটি রুমে আলাদা আলাদা ব্যবহারকারীরা সংযুক্ত থাকবেন।
- গ্রুপ ভিত্তিক ইভেন্ট: আপনি নির্দিষ্ট গ্রুপ বা ব্যবস্থাপনা ইভেন্টগুলি নির্দিষ্ট নেমস্পেসে প্রেরণ করতে পারেন।
- এফফিসিয়েন্ট যোগাযোগ: একাধিক নেমস্পেস ব্যবহার করলে, আপনি ইভেন্টগুলিকে আরো স্পষ্টভাবে সংগঠিত এবং পৃথক করতে পারেন।
1. Socket.IO তে একাধিক Namespace সেটআপ উদাহরণ
Server-Side (Node.js with Socket.IO)
Socket.IO তে একাধিক Namespace ব্যবস্থাপনার জন্য, আপনি .of() মেথড ব্যবহার করতে পারেন। এর মাধ্যমে আপনি আলাদা আলাদা নেমস্পেসে ক্লায়েন্ট এবং সার্ভারের মধ্যে ইভেন্ট পাঠাতে পারেন।
const http = require('http');
const socketIo = require('socket.io');
// HTTP সার্ভার তৈরি
const server = http.createServer((req, res) => {
res.end('Hello from the server');
});
// Socket.IO সার্ভার ইনিশিয়ালাইজ
const io = socketIo(server);
// 'chat' নামক নেমস্পেস তৈরি করা
const chatNamespace = io.of('/chat');
chatNamespace.on('connection', (socket) => {
console.log('User connected to chat namespace');
// ক্লায়েন্ট থেকে বার্তা গ্রহণ
socket.on('chat message', (msg) => {
console.log('Message in chat:', msg);
// chat নেমস্পেসে অন্য সকল ক্লায়েন্টকে বার্তা পাঠানো
chatNamespace.emit('chat message', msg);
});
// ক্লায়েন্ট ডিসকানেক্ট হলে
socket.on('disconnect', () => {
console.log('User disconnected from chat namespace');
});
});
// 'news' নামক একটি আলাদা নেমস্পেস তৈরি করা
const newsNamespace = io.of('/news');
newsNamespace.on('connection', (socket) => {
console.log('User connected to news namespace');
// news নেমস্পেসের জন্য একটি ইভেন্ট
socket.on('news update', (data) => {
console.log('News Update:', data);
newsNamespace.emit('news update', data);
});
// ক্লায়েন্ট ডিসকানেক্ট হলে
socket.on('disconnect', () => {
console.log('User disconnected from news namespace');
});
});
// সার্ভার চালু
server.listen(3000, () => {
console.log('Server running on http://localhost:3000');
});এখানে দুটি আলাদা নেমস্পেস আছে:
- /chat: চ্যাট রুমের জন্য ব্যবহৃত
- /news: নিউজ আপডেটের জন্য ব্যবহৃত
Client-Side (HTML + JavaScript with Socket.IO)
ক্লায়েন্ট সাইডে, আপনি নির্দিষ্ট নেমস্পেসে কানেক্ট করতে পারেন এবং সেই নেমস্পেসের মাধ্যমে ইভেন্ট শোনার বা পাঠানোর কাজ করতে পারেন।
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Socket.IO Namespace Example</title>
<script src="/socket.io/socket.io.js"></script>
<script>
// '/chat' নেমস্পেসে কানেক্ট করা
const chatSocket = io('/chat');
// চ্যাট বার্তা গ্রহণ
chatSocket.on('chat message', (msg) => {
console.log('Received chat message:', msg);
});
// '/news' নেমস্পেসে কানেক্ট করা
const newsSocket = io('/news');
// নিউজ আপডেট গ্রহণ
newsSocket.on('news update', (data) => {
console.log('Received news update:', data);
});
// একটি বার্তা পাঠানো (চ্যাট নেমস্পেসে)
function sendMessage() {
const msg = document.getElementById('message').value;
chatSocket.emit('chat message', msg);
document.getElementById('message').value = '';
}
// নিউজ আপডেট পাঠানো
function sendNewsUpdate() {
const news = document.getElementById('news').value;
newsSocket.emit('news update', news);
document.getElementById('news').value = '';
}
</script>
</head>
<body>
<h1>Socket.IO Namespace Example</h1>
<div>
<h2>Chat Room</h2>
<input type="text" id="message" placeholder="Type your message">
<button onclick="sendMessage()">Send Chat Message</button>
</div>
<div>
<h2>News Updates</h2>
<input type="text" id="news" placeholder="Enter news update">
<button onclick="sendNewsUpdate()">Send News Update</button>
</div>
</body>
</html>2. Namespace ব্যবস্থাপনা
1. Namespace তৈরি:
.of()মেথডের মাধ্যমে আপনি নতুন namespace তৈরি করতে পারেন। এটি একটি নির্দিষ্ট কাস্টম নেমস্পেসের জন্য Socket.IO কানেকশন তৈরি করে, যা মূলতio.of('/namespace-name')রূপে ব্যবহৃত হয়।
2. Namespace-এ ইভেন্ট হ্যান্ডলিং:
- প্রতিটি নেমস্পেসে আপনি নির্দিষ্ট ইভেন্টগুলোর জন্য আলাদা হ্যান্ডলার সেট করতে পারেন।
- উদাহরণস্বরূপ,
/chatনেমস্পেসে আপনি শুধু চ্যাটের বার্তা সংক্রান্ত ইভেন্টে হ্যান্ডলার যুক্ত করতে পারবেন।
3. Namespace-এ ক্লায়েন্ট যোগ করা এবং নির্দিষ্ট করা:
- ক্লায়েন্ট একটি নির্দিষ্ট নেমস্পেসে কানেক্ট হতে পারে, যেমন:
const chatSocket = io('/chat');। - এখানে, একাধিক নেমস্পেসে পৃথকভাবে কানেক্ট করা এবং সেই নেমস্পেসের জন্য আলাদা ইভেন্ট শুনতে পারবেন।
4. Namespace এ ক্লায়েন্টের মধ্যে ডেটা আদান-প্রদান:
- যখন কোনো ক্লায়েন্ট একটি নির্দিষ্ট নেমস্পেসে সংযুক্ত থাকে, তখন আপনি সেই নেমস্পেসের মধ্যে ডেটা পাঠাতে এবং গ্রহণ করতে পারেন।
5. Altering/Removing Namespace:
- যদি আপনি কোনো namespace বন্ধ করতে চান, তবে Socket.IO কনফিগারেশনে তা সরিয়ে নেওয়া সম্ভব, তবে এটি সাধারণত কম ব্যবহৃত।
সারসংক্ষেপ
- Namespace ব্যবহার করে আপনি Socket.IO তে একাধিক ডেটা বা ইভেন্ট প্রক্রিয়া আলাদা আলাদা ভাগে বিভক্ত করতে পারেন।
- এটি বিশেষভাবে দরকারি যখন আপনি বিভিন্ন রুম বা গ্রুপে ব্যবহারকারীদের মধ্যে পৃথকভাবে যোগাযোগ পরিচালনা করতে চান।
- আপনি
.of()মেথড ব্যবহার করে একাধিক নেমস্পেস তৈরি করতে পারবেন এবং ক্লায়েন্ট এবং সার্ভার উভয়ে আলাদা আলাদা ইভেন্ট শোনাতে এবং পাঠাতে পারবেন।
Read more