Tracking User Online / Offline Status in Sails.js
Domanda
Devo scoprire lo stato dell'utente, ovvero se l'utente è online / offline utilizzando WebSeets in vele.js nella mia applicazione web.
per favore aiutami.Grazie mille
Soluzione
A partire da vele V0.9.8, è possibile utilizzare le funzioni onConnect
e onDisconnect
in config/sockets.js
per eseguire un codice ogni volta che una presa si collega o si disconnette dal sistema.Le funzioni ti danno accesso alla sessione, in modo da poter utilizzare che per tenere traccia dell'utente, ma tenere presente che solo perché un socket disconnette, non significa che l'utente abbia disconnesso!Potrebbero avere diverse schede / Windows aperte, ognuna delle quali ha la propria presa ma tutto ciò condivide la sessione.
Il modo migliore per tenere traccia sarebbe quello di utilizzare i metodi Pubsub delle vele.Se si dispone di un modello User
e un UserController
con un metodo login
, potresti fare qualcosa come nelle ultime vele Build:
// 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!
}
}
}
.