2016-06-06 17 views
0

Ich wollte ein Objekt namens player zu verschiedenen Sockets zuordnen. Also dachte ich, der einfachste Weg ist, nurHinzufügen einer Variablen zu Sockets in socket.io

zu machen. Aber egal, was ich versuche, Prototyp zu werden, werde ich immer undefiniert. Hat jemand eine Idee, wie das geht? Auch IDK wenn das eine schlechte Übung ist. Gib mir Bescheid.

+1

Es ist wahrscheinlich „nur“ ein Objekt beitreten wollen, so versuchen Sie es mit 'socket.player = was auch immer ". – robertklep

+0

Ich denke, wir müssen sehen, ob es mehr zu Ihrem Code gibt. Verwenden Sie auch eine Clientseite socket.io? Wenn ja, wie sieht Ihre Emission auf dem Server aus? – Filype

Antwort

3

Ein socket.io socket ist nur ein Javascript-Objekt. Sie können jede Eigenschaft direkt und nicht über den Prototyp hinzufügen.

Also, auf dem Server, können Sie nur eine neue Eigenschaft für das Objekt direkt socket hinzufügen:

io.on('connection', function(socket) { 
    // some code to get the name for this user 
    var name = ..... 
    socket.player = name; 
}); 

Eigenschaften wie diese sind nicht mit dem anderen Ende der Verbindung geteilt - sie sind lokal für diese besondere Objekt und sind nur auf dieser Seite der Verbindung verfügbar.

+0

Dank Bruder, du bist wie ein verdammter Ninja O_O, oder ich bin wirklich langsam ... Lass uns mit dem ehemaligen gehen –

0

Lösung Stand Dezember 2017 (socket.io innards ändert häufiger als man annehmen könnte). In dieser Version habe ich eine join_exclusive Funktion erstellt, die alle Zimmer verlassen, mit Ausnahme der Standard-Zimmer und das neue Zimmer Sie

io.sockets.on('connection', function(socket) { 
    socket.join_exclusive = function (newroom) { 
     for (var room in this.manager.roomClients[this.id]) { 
      if (room == '') continue; // default room required for socket.emit(... 
      this.leave(room.slice(1)); // remove '/' char 
     } 
     this.join(newroom); 
    }; 
}); 
Verwandte Themen