【发布时间】:2015-09-29 21:16:29
【问题描述】:
如果用户有套接字连接,我需要更新一些客户端的东西。
目前,当用户连接他“登录”时,我正在向所有人广播
客户端(可以在服务器端执行并获得相同的结果)
// 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% 唯一的)
然后,当用户断开连接时,我可以将其从阵列中删除并让客户端知道。
这将是我的解决方案,但它似乎非常无效,我希望有更好的解决方案。
【问题讨论】:
-
您几乎肯定会希望使用后一种方法来跟踪服务器上当前连接的用户。当新用户连接时,向他们发送所有客户端的完整列表,但向其他所有人发送单个 UserConnected/UserDisconnected 通知,并让连接的用户更新他们的本地列表。
标签: javascript node.js sockets