首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用socketio实时显示在线/离线用户使用Sails?

如何使用socketio实时显示在线/离线用户使用Sails?
EN

Stack Overflow用户
提问于 2014-04-16 06:41:37
回答 2查看 4.4K关注 0票数 1

我的实时聊天应用程序基于SocketIO.It显示所有用户以及可用的在线用户--登录用户、发出UserConnected套接字,以及当用户断开连接时,发出UserDisconnected套接字,配置/sockets.js中的My Server端套接字代码

代码语言:javascript
运行
复制
onConnect: function(session, socket) {
  if (session.passport) {
    if (session.passport.user && socket.id) {
      sails.io.sockets.emit('UserConnected', {userID : session.passport.user});                       }
    }
  }
  //// By default: do nothing
  //// This is a good place to broadcast a disconnect message, or any other custom socket.io logic
},

onDisconnect: function(session, socket) {
  if (session.passport) {
    if (session.passport.user && socket.id) {
     sails.io.sockets.emit('UserDisconnected', {userID : session.passport.user});
    }
  }
  //// By default: do nothing
  //// This is a good place to broadcast a disconnect message, or any other custom socket.io logic
}

问题是,当用户刷新页面时,它会显示已连接和断开连接到另一个用户,而一个主要问题是,如果一个用户登录了两个不同的浏览器,如果任何一个浏览器关闭,则显示用户与其他用户断开连接,但该用户实际上在另一个浏览器中可用。

我将如何修改/编码以解决这些问题?

提前谢谢

EN

Stack Overflow用户

发布于 2014-04-16 14:48:20

下面是我用于类似目的的方法。

代码语言:javascript
运行
复制
var online_users = {};

module.exports.sockets = {

  onConnect: function(session, socket) { 
    if (_.isString(session.user_id)) {
      if (_.has(online_users, session.user_id)) {
        online_users[session.user_id] += 1;
      } else {
        online_users[session.user_id] = 1;
      }
    }
    sails.io.sockets.emit('crm/online_users', online_users);
  },
  onDisconnect: function(session, socket) {
    if (_.isString(session.user_id)) {
      if (_.has(online_users, session.user_id)) {
        online_users[session.user_id] -= 1;
      } else {
        online_users[session.user_id] = 0;
      }
    }
    sails.io.sockets.emit('crm/online_users', online_users);
  },
}

它跟踪以特定用户身份登录的浏览器数量。这样你就可以用下面的。

代码语言:javascript
运行
复制
if (online_users[session.user_id] > 0) { console.log('USER IS LOGGED IN'); }`
票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23101898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档