【问题标题】:Tracking user online/offline status in sails.js在sails.js 中跟踪用户在线/离线状态
【发布时间】:2014-02-26 07:54:37
【问题描述】:

我必须在我的 web 应用程序中使用sails.js 中的 websockets 找出用户状态,即用户是否在线/离线。

请帮帮我。非常感谢

【问题讨论】:

    标签: socket.io sails.js


    【解决方案1】:

    从 Sails v0.9.8 开始,您可以使用 config/sockets.js 中的 onConnectonDisconnect 函数在套接字连接或断开系统时执行一些代码。这些函数使您可以访问会话,因此您可以使用它来跟踪用户,但请记住,仅仅因为套接字断开连接,并不意味着用户已经注销!他们可以打开几个选项卡/窗口,每个选项卡/窗口都有自己的套接字,但所有这些都共享会话。

    最好的跟踪方法是使用 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!
        }
      }
    
    }
    

    【讨论】:

    • 感谢您的回复。这个答案非常有趣和有用。非常感谢。我现在试过了。正如你所说,即使我没有注销,套接字也会断开连接。所以,当一个人离线时,即当一个人注销时,我也需要跟踪它。
    猜你喜欢
    • 1970-01-01
    • 2012-01-17
    • 2012-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-26
    • 1970-01-01
    相关资源
    最近更新 更多