Tech TutorBangla Web Documentation
Portfolio
HomeHTMLCSSTailwind CSSJavaScriptTypeScriptReactNext.jsNode.jsExpressSocket.IOExpoWordPressPostgreSQLPrismaPostgresNestJSMongoDBDockerTanStackTanStack TableRTK QueryGitGitHub
  • Socket.IO Documentation25টি অধ্যায়
প্রযুক্তি নির্বাচন
HomeHTMLCSSTailwind CSSJavaScriptTypeScriptReactNext.jsNode.jsExpressSocket.IOExpoWordPressPostgreSQLPrismaPostgresNestJSMongoDBDockerTanStackTanStack TableRTK QueryGitGitHub
  • Introduction
  • Why Use Socket.IO
  • Socket.IO vs WebSocket
  • Installation
  • Client-Server Setup
  • Connection Lifecycle
  • Events
  • Data Transfer
  • Broadcasting
  • Rooms
  • Namespaces
  • Private & Group Messaging
  • Acknowledgements & Timeouts
  • Connection State Recovery
  • Reconnection & Errors
  • Authentication
  • Middleware
  • CORS Configuration
  • Express Integration
  • Next.js Integration
  • TypeScript
  • Chat Application
  • Best Practices
  • Next.js + Express Chat App
  • Next.js + Express Notifications
  1. Docs
  2. Socket.IO
  3. Socket.IO Namespaces
Socket.IOIntermediate

Socket.IO Namespaces

custom namespace, default namespace, per-namespace middleware ও dynamic namespace — বাংলায়।

27টি অংশবাংলা ভাষায়

Namespace হলো একই socket server-এর ভিতরে আলাদা আলাদা channel — যেমন /chat, /admin, /notifications। একই TCP connection-এ হলেও এদের event ও middleware সম্পূর্ণ আলাদা থাকে।

শেখার লক্ষ্য

  • namespace ও room-এর পার্থক্য বোঝা
  • custom namespace তৈরি ও ব্যবহার
  • per-namespace middleware কনফিগার
  • কখন namespace, কখন room — সিদ্ধান্ত নেওয়া

Namespace vs Room

বিষয়NamespaceRoom
তৈরিserver code-এ io.of(name)runtime-এ socket.join()
Client থেকে switchনতুন connection object লাগেএকই connection-এ dynamic
Middlewareআলাদা middleware setনেই
কখনapp-এর বড় ভাগ (chat vs admin)ভাগ করা topic/group

Default Namespace

সব client ডিফল্টভাবে / namespace-এ যুক্ত হয়। এখন পর্যন্ত যা করেছি, সব ডিফল্ট namespace-এই।

default namespacejavascript
javascript
// দুটোই ডিফল্ট ('/') namespace
const io = new Server(httpServer);
io.on("connection", (socket) => {
  console.log("root namespace:", socket.nsp.name); // "/"
});

Custom Namespace তৈরি

serverjavascript
javascript
// /chat namespace
const chat = io.of("/chat");

chat.on("connection", (socket) => {
  console.log("chat namespace:", socket.id);

  socket.on("message", (text) => {
    chat.emit("message", text); // শুধু /chat-এর সবাই
  });
});

// /admin namespace
io.of("/admin").on("connection", (socket) => {
  console.log("admin connected:", socket.id);
});
clientjavascript
javascript
// client — namespace-এ connect
const chatSocket = io("/chat");
const adminSocket = io("/admin");

chat.on("message", (text) => console.log("চ্যাট:", text));

// অথবা full URL সহ
const socket = io("http://localhost:3000/chat");
আলাদা connection নয়?

নামের মিল থাকলেও namespace একাধিক physical connection তৈরি করে না — Socket.IO একাধিক namespace-এর জন্য একই underlying connection পুনর্ব্যবহার করে (multiplexing)। client-এর manager সেটি দেখতে পাওয়া যায়।

Per-Namespace Middleware

প্রতিটি namespace-এর নিজের middleware থাকতে পারে — যেমন /admin-এ admin auth দরকার, /chat-এ শুধু login:

namespace middlewarejavascript
javascript
const adminNs = io.of("/admin");

adminNs.use((socket, next) => {
  const token = socket.handshake.auth.token;

  if (token === process.env.ADMIN_TOKEN) {
    next(); // অনুমোদিত
  } else {
    const err = new Error("admin only");
    err.data = { status: 403 };
    next(err); // প্রত্যাখ্যান
  }
});

adminNs.on("connection", (socket) => {
  socket.emit("admin:ready", true);
});
Middleware scope

io.of("/chat").use(...) কেবল /chat namespace-এর connection-এ চলে। অন্যদিকে io.use(...) কেবল root / namespace-এর জন্য (v3 থেকে)। সব namespace-এ একই middleware দরকার হলে একটি reusable function বানিয়ে প্রতিটিতে (বা dynamic namespace-এর parent-এ) register করুন। আরও: Middleware।

Dynamic Namespace (v4)

Socket.IO v4-এ io.of(/regex/) দিয়ে dynamic namespace বানানো যায়:

dynamic namespacesjavascript
javascript
const dynamic = io.of(/^\/project-\d+$/);

dynamic.on("connection", (socket) => {
  // socket.nsp.name = "/project-42" ইত্যাদি
  console.log("সংশ্লিষ্ট project:", socket.nsp.name);
});

কখন Namespace বেছে নেবেন?

  • একই server-এ সম্পূর্ণ আলাদা domain থাকলে — chat vs admin vs notification
  • আলাদা auth/middleware দরকার হলে
  • আলাদা client module/connection object ব্যবস্থাপনা সহজ হলে

সাধারণত rooms দিয়েই কাজ চলে; namespace তখনই ব্যবহার করা উচিত যখন middleware বা connection আলাদা করা দরকার।

সাধারণ ভুল ও সমাধান

  • namespace নাম ভুল — client io("/chat") আর server io.of("/chat"); দুই জায়গায় একই নাম রাখুন
  • room আর namespace মেলানো — /chat namespace আলাদা object; io.to("chat") দিলে default namespace-এর "chat" room-এ যায়, /chat namespace-এ নয়
  • সব কাজ এক namespace-এ — ভবিষ্যতে বড় হলে ভাগ করা কঠিন

Practice Task

  • /chat ও /admin — দুটি namespace বানিয়ে আলাদা message পাঠান
  • /admin-এ token middleware দিয়ে সঠিক/ভুল token test করুন
  • একটিমাত্র connection-এ একাধিক namespace ব্যবহার করে announce করুন

সম্পর্কিত অধ্যায়: Rooms · Private and Group Messaging · Middleware

শেষ প্যারায় নিজে practice করুন — কোড কপি করে নিজের এডিটরে চালিয়ে দেখুন।
আগেরSocket.IO RoomsপরেরSocket.IO Private and Group Messaging
এই পেজে
Tech Tutor

বাংলায় ওয়েব ডেভেলপমেন্ট ডকুমেন্টেশন শিখুন — ধাপে ধাপে।

Homeসব ডকুমেন্টেশনQuick Startআমার নোটস

© 2026 Tech Tutor. বাংলায় শিখুন, বাংলায় গড়ুন।

mdanamolhasan1998@gmail.com