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

¿Fue útil?

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!
    }
  }

}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top