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 Rooms
Socket.IOIntermediate

Socket.IO Rooms

join/leave, room-এ emit, adapter ও real-world use case — Socket.IO rooms বাংলায়।

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

Room হলো socket-এর একটি দল। একজন client একাধিক room-এ থাকতে পারে, আর একটি বার্তা শুধু নির্দিষ্ট room-এর সদস্যরাই পায়। Chat channel, game lobby, project group — এসবের ভিত্তি হলো room।

শেখার লক্ষ্য

  • room-এ join/leave করা
  • নির্দিষ্ট room-এ বার্তা পাঠানো
  • disconnect-এর সময় room cleanup
  • room তথ্য inspect করা

Room-এ Join ও Leave

join / leavejavascript
javascript
io.on("connection", (socket) => {
  // room-এ যোগ দিন
  socket.join("general");

  // একাধিক room একসাথে
  socket.join(["general", "news"]);

  // room ছেড়ে দিন
  socket.leave("news");

  // disconnected হলে Socket.IO নিজেই সব room থেকে বের করে দেয়
  socket.on("disconnect", () => {
    console.log(socket.id, "left all rooms");
  });
});

socket.join(room) ও socket.leave(room) synchronous ভাবে room membership বদলায়। disconnect হলে Socket.IO নিজেই সংশ্লিষ্ট সব room থেকে socket-কে সরিয়ে দেয় — হাতে leave লিখতে হয় না।

Room-এ Emit

emit to roomjavascript
javascript
// sender ছাড়া room-এর বাকি সবাই
socket.to("general").emit("chat:message", {
  from: socket.id,
  text: "হ্যালো room!",
});

// room-এর সবাই (sender সহ)
io.to("general").emit("announcement", "Meeting শুরু হলো");

// একাধিক room একসাথে
io.to("general").to("news").emit("event", "কমন খবর");
Chain করে নির্দেশ

io.to(roomA).to(roomB) লিখলে A অথবা B — যে-ই roomA-তে, roomB-তে, বা দুটোতেই আছে — সে পাবে (union)। sender কে বাদ দিতে socket.to(...), আর একটি room-এর বাইরের সবাইকে io.except(room).emit(...) ব্যবহার করুন।

Line-by-line: join a room

serverjavascript
javascript
socket.on("room:join", (roomName) => {
  // 1. input validate
  if (typeof roomName !== "string" || !roomName.trim()) return;

  const room = roomName.trim().toLowerCase().slice(0, 40);

  // 2. room-এ ঢুকুন
  socket.join(room);

  // 3. room-এর বাইরে সবাইকে জানান
  socket.to(room).emit("room:joined", {
    id: socket.id,
    room,
  });

  // 4. sender-কে reply — নতুন সদস্যকে স্বাগত
  socket.emit("room:welcome", `আপনি "${room}" room-এ আছেন`);
});
  • Step 1 — client-এর room নাম বিশ্বাস করে সরাসরি join করবেন না; validate করুন
  • Step 2 — membership বদলান
  • Step 3 — অন্যান্য সদস্যকে notify (socket.to(room), sender বাদ)
  • Step 4 — .emit sender-কে, welcome message

Room Inspect করা (adapter)

inspect roomsjavascript
javascript
// একটি socket কোন কোন room-এ আছে (v4: socket.rooms একটি Set)
console.log(socket.rooms); // Set(2) { <socketId>, "general" }

// একটি room-এর সদস্যসংখ্যা
const size = await io.in("general").fetchSockets();
console.log("general room-এ:", size.length);

// সব room-এর map
console.log(io.sockets.adapter.rooms);
Scale

একাধিক server process/node-এ চালালে in-memory room তথ্য প্রতি node-এ আলাদা থাকে। তখন Redis adapter (@socket.io/redis-adapter) লাগবে, যাতে সব node একই room mapping শেয়ার করে। বিস্তারিত Best Practices-এ।

Use Case: Chat Channels

  • general, random, support — আলাদা room
  • user room বেছে নিলে socket.join(room)
  • message পাঠালে socket.to(room).emit(...)
  • room ছাড়লে message আর আসে না

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

  • Room নাম normalize না করা — "General" আর "general" কে আলাদা ধরে; সবসময় toLowerCase()/trim
  • Leave না করা — user channel বদলালে পুরনো room-এ থেকে গেলে ভুল room-এ message আসে
  • io.emit ব্যবহার করে room-এর পরিবর্তে — সবার কাছে চলে যাবে; room scope ভেঙে যায়

Practice Task

  • ২টি room (general, random) বানান; ২ browser-এ ভিন্ন room-এ join করে দেখুন কে কোন message পায়
  • socket.rooms log করে নিজের socket কোথায় আছে তা verify করুন
  • room history-এর জন্য সর্বশেষ ৫টি message রাখা practice করুন

সম্পর্কিত অধ্যায়: Broadcasting Events · Namespaces · Private and Group Messaging

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

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

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

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

mdanamolhasan1998@gmail.com