2013-04-08 11 views
6

Chcę zapisać niektóre dane na gniazdo, po stronie serwera, więc zawsze, gdy klient wysyła jakiekolwiek dane do serwera, chcę, aby dane były dostępne!Zapisz dane na gniazdo w Socket.IO

Jednym z przypadków użycia może być przechowywanie tokena na gnieździe. Kiedy klient łączy się po raz pierwszy, emituje token, jeśli taki posiada, lub wyświetli stronę logowania, a następnie dane logowania zostaną przesłane na serwer. Niezależnie od tego, chcę przechowywać token na serwerze, aby każde kolejne żądanie nie wymagało określenia tokena.

Później użyję RedisStore, więc wszystkie dane będą dostępne dla wszystkich serwerów z uruchomioną aplikacją.

Moje jedyne pytanie brzmi: gdzie mam przechowywać dane w gnieździe, aby był powiązany z tym klientem?

Odpowiedz

8

na http://socket.io/#how-to-use przewijania do: przechowywania danych związanych z klientem

użytkowania socket.set i socket.get ustawienie i uzyskać dane asynchronicznie

+0

Wielkie dzięki! To działa! :) –

+3

Ta metoda wydaje się nie działać już na socket.io 1.0, czy możliwa aktualizacja? – dievardump

+1

Metody io.set() i io.get() są uznawane za przestarzałe w wersji 1.0. Musisz użyć oprogramowania pośredniego. http://socket.io/docs/migrating-from-0-9/ –

0

Można zapisać dane o zmiennych globalnych, kiedy nie chcesz korzystać z dowolnej bazy danych

var globalVariable = {}; 

io.sockets.on("connection", function (socket) { 

    socket.on("save-client-data", function (clientData) { 
      var clientId = clientData.clientId; 
      globalVariable[clientId] = JSON.parse(clientHandshakeData); 
    }); 

    socket.on("get-client-data", function (clientId) { 

      var clientData = globalVariable[clientId]; 
      socket.emit("get-client-data", JSON.stringify(clientData)); 

    }); 

}); 

Ten pracował dla mojego scenariusza, jednak nie jestem świadomy konsekwencji wydajności.

Powiązane problemy