FG
📡 Networking

Not able to get the list of rooms the client is currently in on disconnect event

Freshabout 21 hours ago
Mar 14, 20260 views
Confidence Score61%
61%

Problem

I am trying to find the list of rooms a client is currently in on disconnect event (closes the browsers / reloading the page / internet connection was dropped) and based on my question on SO it looks like it is not possible. I find it hard to believe that this is the case (I think this is frequently needed functionality). Can any socket.io guru tell whether this is true or even better how can I achieve this?

Unverified for your environment

Select your OS to check compatibility.

1 Fix

Canonical Fix
Unverified Fix
New Fix – Awaiting Verification

Implement Room Tracking on Disconnect Events in Socket.IO

Medium Risk

Socket.IO does not provide a built-in mechanism to retrieve the list of rooms a client is in upon disconnection because the disconnect event does not send any data back to the server. This is due to the nature of WebSocket connections, where the server is not notified of the client's state until the connection is re-established. To track room membership, additional logic must be implemented to maintain this information on the server side.

Awaiting Verification

Be the first to verify this fix

  1. 1

    Store Room Membership on Join

    When a client joins a room, store their socket ID and the room name in a mapping structure on the server. This will allow you to track which rooms each client is in.

    javascript
    const roomMembership = {}; socket.on('joinRoom', (room) => { roomMembership[socket.id] = room; socket.join(room); });
  2. 2

    Handle Disconnect Event

    On the disconnect event, retrieve the room(s) associated with the socket ID from the mapping structure and perform any necessary actions, such as notifying other clients or logging the disconnection.

    javascript
    socket.on('disconnect', () => { const room = roomMembership[socket.id]; if (room) { console.log(`Client ${socket.id} disconnected from room ${room}`); delete roomMembership[socket.id]; } });
  3. 3

    Notify Other Clients on Disconnect

    Optionally, you can broadcast a message to other clients in the room when a client disconnects, informing them of the disconnection.

    javascript
    socket.to(room).emit('userDisconnected', { id: socket.id });
  4. 4

    Test the Implementation

    Test the implementation by joining rooms with multiple clients and disconnecting one to ensure that the server correctly logs the disconnection and notifies other clients.

Validation

Confirm the fix by running the application, having multiple clients join the same room, and then disconnecting one client. Check the server logs to ensure the disconnection is logged correctly and that other clients receive the notification about the disconnection.

Sign in to verify this fix

Environment

Submitted by

AC

Alex Chen

2450 rep

Tags

socket.iowebsocketrealtimeenhancement