2016-10-21 2 views
1

Wie speichere ich sitzungsspezifische Informationen im Socket io?Socket io clientspezifische Variable

Wie verwende ich die Clientvariable nur für die Operationen, die sich auf den aktuell verbundenen Client beziehen, wenn dieser als statisch betrachtet wird?

Danke.

Antwort

2

Zuerst erhält jeder Socket einen Namen, der dazu verwendet werden kann, sich darauf zu beziehen, der sich jedoch jedes Mal ändert, wenn derselbe Client eine Verbindung herstellt. Dies wäre nicht nützlich, wenn er nach dem Verlassen des Clients erhalten bleiben soll. Wenn es Ihr Ziel ist, die Verbindungszeit irgendwo zu speichern (eine Datenbank?), Dann müssten Sie eine eindeutige Kennung vom Client erhalten, die verwendet werden könnte, um sie ähnlich einer Anmeldung wiederzufinden. Sie würden dann das date-Objekt in die Funktion übergeben, die diese Zeit speichert.

Sie sollten jedoch beachten, dass "Verbindung" nur das erste Mal aufgerufen wird, wenn der Socket verbindet. Eine Verbindung ist nicht das Ereignis, das Sie normalerweise verwenden würden, wenn ein Client etwas ausführt, es sei denn, sie trennen die Verbindung zwischen jedem Zugriff des Serverprogramms.

Wenn Sie sicher sind, dass Sie nur das Client-Objekt verwenden möchten, müssten Sie wahrscheinlich ein Client-Array erstellen und die Socket-ID als Schlüssel für den späteren Zugriff auf das Objekt verwenden. Sie würden dann etwas wie

array [socket.id] .connectiontime = Date.now()

var client={}; //is this static across all sockets (or connected clients) that are connected? 
var clients = []; 
io.on('connection', function(socket){ 
    clients[] = { 
       id : socket.id 
       connectiontime : Date.now() 
    } 
}); 


//on another io.on('connection') for the same connected client 
io.on('connection', function(socket){ 
// Here you would search for the object by socket.id and then store 
store(client.connectiontime); 
} 
+0

Aber gibt es eine Variable, die nur für diese spezielle Kunden-Sitzung verwendet werden können? – Josh

+1

Auf 'Verbindung' wird eine socket.id generiert und das ist die ID, mit der das Programm erkennt, mit welchem ​​Socket es kommuniziert. In dem von mir bereitgestellten Code verwendet der Teil id: socket.id diesen eindeutigen Bezeichner. Es wird Ihnen die Person nicht sagen, weil sie sich ändert, wenn sie die Verbindung trennt und wieder verbindet, aber es ist die Kennung speziell für die Sitzung dieses Benutzers, während sie mit dem Servercode – KM529

+0

verbunden ist. Also muss ich das manuell verwalten? Ich dachte, Socket io würde eine Möglichkeit bieten, Werte zu speichern, die nur für jede Clientsitzung gedacht sind, und mich vor der Arbeit der Pflege von Clients und deren Sitzungen schützen. – Josh