Seguimiento del estado en línea/fuera de línea del usuario en Sails.js
Pregunta
Tengo que averiguar el estado del usuario, es decir, si el usuario está en línea/fuera de línea utilizando websockets en Sails.js en mi aplicación web.
Por favor, ayúdame .Muchas gracias
Solución
A partir de Sails v0.9.8, puede utilizar el onConnect
y onDisconnect
funciones en config/sockets.js
para ejecutar algún código cada vez que un socket se conecta o desconecta del sistema.Las funciones le dan acceso a la sesión, por lo que puede usarla para realizar un seguimiento del usuario, pero tenga en cuenta que el hecho de que un socket se desconecte no significa que el usuario haya cerrado la sesión.Podrían tener varias pestañas/ventanas abiertas, cada una de las cuales tiene su propio socket pero todas comparten la sesión.
La mejor manera de realizar un seguimiento sería utilizar los métodos de Sails PubSub.Si tienes un User
modelo y un UserController
con un login
método, podrías hacer algo como en la última versión de Sails:
// 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!
}
}
}