Ich habe Node/Express-App, für die ich versuche, aktive Benutzer zu verfolgen.Tracking aktive Benutzer mit Socket.io und Firebase
Die App basiert auf einer externen API zum Ausgeben und Empfangen von JWT-Tokens. Diese Token werden direkt an den Client übergeben, wo sie gespeichert und für nachfolgende API-Anfragen verwendet werden. Das heißt, ich benutze keine Node "Sessions".
Ich verwende socket.io, um eine benutzerdefinierte login
, logout
und die disconnect
Ereignisse einhängen. Wenn diese Ereignisse ausgelöst werden, kann ich die Datenbank (Firebase) aktualisieren und aktive Benutzer nach Bedarf hinzufügen/entfernen.
Das Problem ist, dass meine App Last über mehrere Server verteilt ist, so kann ich die aktiven Benutzer nicht durch socket.id
, da es sich ändern kann. Mein Gedanke war, die aktiven Benutzer durch user_id
zu markieren, aber, Ich kann nicht herausfinden, wie man die Benutzeridentifikation vom disconnect
Ereignis erhält. Die anderen Ereignisse werden vom Client ausgelöst, so kann ich nur die Benutzer-ID an den Server senden ...
Client.js
import io from 'socket.io-client';
const socket = io('/');
socket.emit('login', {user_id: 1234, email: '[email protected]'})
server.js
io.on('connection', (socket) => {
const activeUsersRef = admin.database().ref('activeUsers');
socket.on('login', (userData) => {
activeUsersRef.update({
[userData.user_id]: userData
})
});
socket.on('logout', (userData) => {
activeUsersRef.update({
[userData.user_id]: null
})
});
socket.on('disconnect',() => {
// How to get user ID?
activeUsersRef.update({
[???]: null
})
});
});
Wie kann ich über das Ereignis disconnect
auf die Benutzer-ID zugreifen, wenn ich keine Benutzersitzungen in einem Knotenserver protokolliere?
Ich habe eine vorherige Antwort [hier] (http://stackoverflow.com/questions/37591541/how-to-change-status-of-perticular-user-when-socket-is-disconnect/37592164#37592164) gepostet das könnte helfen – Rho