Wie speichere ich Socket-Ressourcen von bestimmten Benutzern mit socket.io?

Ich entwerfe ein Chat-Skript, das ich mit verschiedenen Browsern auf meinem Computer teste. Ich versuche mit socket.io Nachrichten an bestimmte Benutzer zu senden.

client:

socket.on('msgFromServer', function (data) {
     message = data['message'],
     from = data['from'],
     to = data['to'];               

    if($('#chatbox.'+from).dialog("isOpen") === true){
        $('#chatbox.'+from+' #messageOutput textarea.readOnly').text(message);      
    }   
    else if(($('#chatbox.'+from).dialog("isOpen") !== true)){
        createChatbox(from,to,message);
    }
});




server:

var users = {};
io.sockets.on('connection', function (socket) {
    if( ( users.hasOwnProperty(req.session.name) === false))
            users[req.session.name] = socket;

    socket.on('msgToServer', function (data) {
         for (var u in users){
              console.log("%s | %s",u,users[u]);
         }      

     });
}); 

Nun, ich werde über die Struktur des Codes im Zusammenhang mit dem Server sprechen. Es ist dafür verantwortlich, einen Benutzer bei einem "Verbindungs" -Ereignis zu speichern. Das Problem beginnt, wenn ich die Seite neu lade: Es speichert den Benutzer von Browser A im Benutzerobjekt, wenn ich es neu lade und wieder verbinde, speichert es erneut, aber wenn ich frage, welche Inhalte das Benutzerobjekt in Browser B hat ... die Info ist veraltet und zeigt nicht das gleiche Ergebnis wie wenn ich frage, welche Inhalte das Objekt in Broser A enthält, obwohl ich versuche, die Null zu überprüfen, um Werte zu speichern, wenn Benutzer leer sind -> if ((users .hasOwnProperty (req.session.name) === false)). Grundsätzlich benötige ich ein Mittel zum Speichern jeder Socket-Ressource in einerContainer(in der Tat muss nicht unbedingt ein Objekt sein) mit einem Bezeichner (req.session.name) und um einen solchen Container für alle Sitzungen in allen Browsern verfügbar zu haben, könnte der Server, wenn er eine Nachricht von Browser A an Browser B erhält, diese identifizieren und eine Antwort an Browser B senden.

Ich habe eine Vorstellung davon, was ich wolltehttps://github.com/generalhenry/specificUser/blob/master/app.js undhttp://chrissilich.com/blog/socket-io-0-7-sending-messages-to-individual-clients/

Wenn Sie sich den Code auf chrissilich.com genau ansehen, gibt der Autor an, dass wir die 'socket.id' (users [incoming.phonenumber] = socket.id) speichern müssen, während wir dies in git generalhenry tun müssen Speichern Sie die 'Socket'-Ressource (users [myName] = Socket). Letzterer ist der richtige, da die Werte von socket.id in beiden Browsern tendenziell gleich sind ... und sich dieser Wert automatisch ändert, ich weiß nicht, warum es ihn gibt ... Ich nehme an, dass er in früheren Versionen von node existiert so funktioniert.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage