Socket.io: cómo unirse y salir correctamente de las habitaciones

Estoy tratando de aprender Socket.io mediante la creación de un conjunto de salas de chat creadas dinámicamente que emiten mensajes 'conectados' y 'desconectados' cuando los usuarios entran y salen. Después de mirar unPareja de preguntas He reunido algo funcional, pero la mayoría de las respuestas vinculadas provienen de personas que admiten que han pirateado las respuestas y he notado que hay una discusión más general y reciente sobre la forma correcta de hacer esto en Socket.io repo (notablementeaquí yaquí)

Como soy un novato, no sé si el trabajo a continuación es una forma aceptable de hacer cosas o si simplemente funciona de manera incidental, pero causará problemas de rendimiento o resultará en demasiados oyentes. Si hay una forma ideal, y oficial, de unirse y salir de las habitaciones que se siente menos torpe que esto, me encantaría saberlo.

Cliente

var roomId = ChatRoomData._id // comes from a factory


function init() {

    // Make sure the Socket is connected
    if (!Socket.socket) {
        Socket.connect();
    }

    // Sends roomId to server
    Socket.on('connect', function() {
        Socket.emit('room', roomId);
    });

    // Remove the event listener when the controller instance is destroyed
    $scope.$on('$destroy', function () {
        Socket.removeListener('connect');
    });

}

init();

Servidor

  io.sockets.once('connection', function(socket){
    socket.on('room', function(room){     // take room variable from client side
      socket.join(room) // and join it

      io.sockets.in(room).emit('message', {      // Emits a status message to the connect room when a socket client is connected
        type: 'status',
        text: 'Is now connected',
        created: Date.now(),
        username: socket.request.user.username
      });

      socket.on('disconnect', function () {   // Emits a status message to the connected room when a socket client is disconnected
        io.sockets.in(room).emit({ 
          type: 'status',
          text: 'disconnected',
          created: Date.now(),
          username: socket.request.user.username
        });  
      })
  });