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
- See Server SDK → Rooms and Client SDK → Rooms for full details.
- See Presence for more on tracking users in rooms.
Last updated on