Отслеживание статуса пользователя онлайн/офлайн в Sails.js

StackOverflow https://stackoverflow.com//questions/22035085

  •  21-12-2019
  •  | 
  •  

Вопрос

Мне нужно узнать статус пользователя, т. е. находится ли пользователь в сети/офлайн, используя веб-сокеты вails.js в моем веб-приложении.

Пожалуйста, помогите мне .Большое спасибо

Это было полезно?

Решение

Начиная с Sails v0.9.8, вы можете использовать onConnect и onDisconnect функции в config/sockets.js для выполнения некоторого кода всякий раз, когда сокет подключается или отключается от системы.Функции предоставляют вам доступ к сеансу, поэтому вы можете использовать его для отслеживания пользователя, но имейте в виду, что отключение сокета не означает, что пользователь вышел из системы!У них может быть открыто несколько вкладок/окон, каждое из которых имеет свой собственный сокет, но все они используют общий сеанс.

Лучший способ отслеживать — использовать методы Sails PubSub.Если у тебя есть User модель и UserController с login метод, вы можете сделать что-то вроде последней сборки 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!
    }
  }

}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top