2016-05-28 4 views
1

In der Dokumentation heißt es: "Jeder Socket in Socket.IO wird durch eine zufällige, nicht identifizierbare, eindeutige Kennung Socket # ID identifiziert. Zu Ihrer Bequemlichkeit tritt jeder Socket automatisch ein Raum durch identifiziert diese ID. "Sockel io. Deaktivieren Sie automatisch Beitritt eines Raumes durch Socket-ID identifiziert

Ich frage mich, ob es eine Option gibt, um diese Funktion zu deaktivieren. Meine Lösung war:

io.on('connection', function (socket) { 
    leaveDefRoom(socket); 
[...] 
} 

function leaveDefRoom(socket){ 
    var room = socket.adapter.rooms; 
    for (var key in room){ 
     if (key.charAt(0) == '/') { 
      socket.leave(key); 
      return; 
     } 
    } 
} 

Antwort

2

In socket.io. Jedes Mal, wenn Sie emit Ereignis. socket.io sendet das Ereignis an den Client in diesem Raum. Wenn Sie den Benutzer aus dem Raum entfernen, können Sie diese Benutzernachrichten nicht senden. Sogar die Übertragung funktioniert nicht.

Wie auch immer, wenn Sie wirklich wollen, können Sie dieses Zimmer, wie jedes andere Zimmer verlassen:

Sie können socket.js Datei ändern und diese Option deaktivieren:

https://github.com/socketio/socket.io/blob/master/lib/socket.js#L289

Socket.prototype.onconnect = function(){ 
    debug('socket connected - writing packet'); 
    this.nsp.connected[this.id] = this; 
    // You have to remove this line below: 
    this.join(this.id); 
    this.packet({ type: parser.CONNECT }); 
};