Verfolgen des Online-/Offline-Status des Benutzers in Sails.js
Frage
Ich muss den Benutzerstatus herausfinden, dh ob der Benutzer online/offline ist, indem ich Websockets in Sails.js in meiner Webanwendung verwende.
Bitte hilf mir .Vielen Dank
Lösung
Ab Sails v0.9.8 können Sie das verwenden onConnect
Und onDisconnect
Funktionen in config/sockets.js
um Code auszuführen, wann immer ein Socket eine Verbindung zum System herstellt oder trennt.Mit den Funktionen erhalten Sie Zugriff auf die Sitzung, sodass Sie damit den Überblick über den Benutzer behalten können. Beachten Sie jedoch, dass die Trennung der Verbindung durch einen Socket nicht bedeutet, dass sich der Benutzer abgemeldet hat!Sie könnten mehrere Registerkarten/Fenster geöffnet haben, von denen jedes über einen eigenen Socket verfügt, die jedoch alle die Sitzung teilen.
Der beste Weg, den Überblick zu behalten, wäre die Verwendung der PubSub-Methoden von Sails.Wenn Sie eine haben User
Modell und a UserController
mit einem login
Methode könnten Sie so etwas wie im neuesten Sails-Build tun:
// UserController.login
login: function(req, res) {
// Lookup the user by some credentials (probably username and password)
User.findOne({...credentials...}).exec(function(err, user) {
// Do your authorization--this could also be handled by Passport, etc.
...
// Assuming the user is valid, subscribe the connected socket to them.
// Note: this only works with a socket request!
User.subscribe(req, user);
// Save the user in the session
req.session.user = user;
});
}
// config/sockets.js
onConnect: function(session, socket) {
// If a user is logged in, subscribe to them
if (session.user) {
User.subscribe(socket, session.user);
}
},
onDisconnect: function(session, socket) {
// If a user is logged in, unsubscribe from them
if (session.user) {
User.unsubscribe(socket, session.user);
// If the user has no more subscribers, they're offline
if (User.subscribers(session.user.id).length == 0) {
console.log("User "+session.user.id+" is gone!");
// Do something!
}
}
}