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

War es hilfreich?

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

}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top