套接字.IO是跟踪用户是否在线的最好方法

socket.io best way to track if a user is online

本文关键字:方法 在线 是否 IO 跟踪 用户 套接字      更新时间:2023-09-26

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

当前,当用户连接时,我会向所有人广播他"登录"


客户端(可以在服务器端执行并得到相同的结果)

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

服务器端

io.sockets.on('connection', function (socket) {
    socket.on("im online", function (data) {
        // announce the online status of a new user
        socket.broadcast.emit('connected user',  {"name": socket.handshake.headers.user.username});
    });
});

问题是,现在我加载页面,我让每个人都知道我是"在线",因为页面加载触发事件,但如果我是偶像和另一个用户重新加载他/她的页面没有触发在我的端,所以没有迹象表明我在线。

所以我认为服务器端我可以捕获所有用户的数组谁使它到connection并将该数组发送到任何新的客户端连接并使用它来比较用户的朋友列表,看看是否有任何用户名匹配(用户名在每种情况下都是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});
});

当客户端断开连接时,服务器端会自动生成disconnect事件。

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