Javascript socket.io跟踪用户是否在线的最佳方法

Javascript socket.io跟踪用户是否在线的最佳方法,javascript,node.js,sockets,Javascript,Node.js,Sockets,如果用户有套接字连接,我需要更新一些客户端的东西 目前,当用户登录时,我正在向所有人广播 客户端可以在服务器端完成,并得到相同的结果 // announce to everyone the user is online socket.on('connect', function() { socket.emit('im online'); }); 服务器端 问题是,现在我加载页面,我会让每个人都知道我在线,因为加载页面会触发事件,但如果我是idol,而另一个用户重新加载他/她的页面,我这边不

如果用户有套接字连接,我需要更新一些客户端的东西

目前,当用户登录时,我正在向所有人广播

客户端可以在服务器端完成,并得到相同的结果

// announce to everyone the user is online
socket.on('connect', function() {
  socket.emit('im online');
});
服务器端

问题是,现在我加载页面,我会让每个人都知道我在线,因为加载页面会触发事件,但如果我是idol,而另一个用户重新加载他/她的页面,我这边不会触发任何事件,因此没有迹象表明我在线

因此,我认为服务器端我可以捕获所有连接到该连接的用户的数组,并将该数组发送到任何新连接的客户端,并使用该数组与用户朋友列表进行比较,以查看是否有用户名匹配。顺便说一句,在每种情况下,用户名都是100%唯一的

然后,当用户断开连接时,我可以将其从阵列中移除,并让客户端知道


这将是我的解决方案,但它似乎非常无效,我希望有更好的解决方案。

您也可以轻松广播断开连接事件:

socket.on("disconnect", function (data) {
    // announce the offline status of a new user
    socket.broadcast.emit('disconnected user',  {"name": socket.handshake.headers.user.username});
});
当客户端断开连接时,服务器端会自动生成断开连接事件


另一方面,您可能必须在服务器端存储所有已连接的用户,因为否则新连接的用户将不会收到关于已连接的其他用户的通知。

您几乎肯定会希望使用后一种方法来跟踪服务器上当前连接的用户。当新用户连接时,向他们发送所有客户端的完整列表,但向其他所有人发送单个UserConnected/UserDisconnected通知,并让连接的用户更新其本地列表。是的,这正是问题所在。另一方面,您可能必须在服务器端存储所有连接的用户,因为否则,新连接的用户不会被通知已经连接的其他用户。可能有100个用户,但我只有3个,所以现在我向客户端发送一个100个的数组,并检查客户端存在哪些朋友。我已经知道断开连接事件,问题就在我刚才引用的内容中。我正在尝试找出一个最能存储此服务器端并与之通信的解决方案。您可以筛选服务器端的好友,并在客户端连接时仅将筛选后的列表发送给客户端,但稍后您只能发送已连接/断开连接的事件。
socket.on("disconnect", function (data) {
    // announce the offline status of a new user
    socket.broadcast.emit('disconnected user',  {"name": socket.handshake.headers.user.username});
});