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

时间:2015-09-29 21:16:29

标签: javascript node.js sockets

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

目前,当用户连接时,我正在向所有人广播,他已登录"

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

// 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%唯一BTW)

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

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

1 个答案:

答案 0 :(得分:0)

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

socket.on("disconnect", function (data) {
    // announce the offline status of a new user
    socket.broadcast.emit('disconnected user',  {"name": socket.handshake.headers.user.username});
});

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

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