Отслеживание статуса пользователя онлайн/офлайн в Sails.js
Вопрос
Мне нужно узнать статус пользователя, т. е. находится ли пользователь в сети/офлайн, используя веб-сокеты в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!
}
}
}