【发布时间】:2014-02-26 07:54:37
【问题描述】:
我必须在我的 web 应用程序中使用sails.js 中的 websockets 找出用户状态,即用户是否在线/离线。
请帮帮我。非常感谢
【问题讨论】:
我必须在我的 web 应用程序中使用sails.js 中的 websockets 找出用户状态,即用户是否在线/离线。
请帮帮我。非常感谢
【问题讨论】:
从 Sails v0.9.8 开始,您可以使用 config/sockets.js 中的 onConnect 和 onDisconnect 函数在套接字连接或断开系统时执行一些代码。这些函数使您可以访问会话,因此您可以使用它来跟踪用户,但请记住,仅仅因为套接字断开连接,并不意味着用户已经注销!他们可以打开几个选项卡/窗口,每个选项卡/窗口都有自己的套接字,但所有这些都共享会话。
最好的跟踪方法是使用 Sails PubSub 方法。如果你有一个 User 模型和一个带有 login 方法的 UserController,你可以在最新的 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!
}
}
}
【讨论】: