Socket.io: Wie man Räume richtig betritt und verlässt

Ich versuche, Socket.io zu lernen, indem ich eine Reihe von dynamisch erstellten Chatrooms erstelle, die beim Betreten und Verlassen von Räumen "verbundene" und "getrennte" Nachrichten senden. Nach einem Blick auf einPaa vo Frage Ich habe etwas Funktionales zusammengestellt, aber die meisten der verknüpften Antworten stammen von Leuten, die zugeben, dass sie Antworten zusammen gehackt haben, und ich habe festgestellt, dass es eine allgemeinere und aktuellere Diskussion darüber gibt, wie dies auf dem Socket richtig gemacht werden kann. io repo (insbesondereHie undHie)

Als Anfänger weiß ich nicht, ob die folgende Arbeit eine akzeptable Methode ist, um Dinge zu tun, oder ob sie zufällig funktioniert, aber Leistungsprobleme verursacht oder zu viele Zuhörer ergibt. Wenn es eine ideale und offizielle Möglichkeit gibt, Räume zu betreten und zu verlassen, die sich weniger klobig anfühlt, würde ich gerne mehr darüber erfahren.

Klien

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();

Serve

  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
        });  
      })
  });

Antworten auf die Frage(2)

Ihre Antwort auf die Frage