Skip to Content
Rooms

Rooms

Rooms are logical groups of connections. Clients can join and leave rooms, and servers can broadcast messages or track membership (i.e. presence).

Membership is tracked in Redis and cleaned up automatically when a connection closes—across all server instances.

Client: join a room

// Join a room const { success, present } = await client.joinRoom("lobby"); // Join with presence updates const { success, present } = await client.joinRoom("lobby", (update) => { if (update.type === "join") { console.log("User joined:", update.connectionId); } else if (update.type === "leave") { console.log("User left:", update.connectionId); } });

Server: manage rooms

// Add a connection to a room await server.addToRoom("lobby", connection); // Get members in a room const members = await server.getRoomMembers("lobby"); // Remove from a room await server.removeFromRoom("lobby", connection);

Access control

Protect rooms with middleware:

server.useMiddleware(async (ctx) => { if (ctx.command === "mesh/join-room") { const { roomName } = ctx.payload; // Check if user can join this room if (roomName.startsWith("private:") && !isAuthorized(ctx)) { throw new Error("Access denied"); } } });

Features

  • Distributed membership tracking via Redis
  • Automatic cleanup on disconnect
  • Real-time presence updates (optional)
  • Access control via middleware
  • Broadcast messaging to room members
  • Works across multiple server instances

Last updated on
© 2025