我正在构建一个Node.js / Socket.io项目。
我有一个基于他们的websocket id的用户哈希。当用户发出以下请求时,我想将它们添加到查看该页面的一组用户中。
app.get('/board/:id', function(req, res){}
我想保留像
这样的东西浏览= { 用户名:id, 用户名:id, ... }
然而我不确定如何删除用户让我们说他们是否离开了页面。是否有某种功能在页面休假时被调用?
$(window).unload(function(){
var username = $('#username').text();
var pid = currentProject;
var data = {
username: username,
id : pid
}
socket.emit('leaving-page', data);
})
答案 0 :(得分:2)
...是否有某种功能可以在页面上调用 离开? ...
是的,但不可靠。
人们跟踪谁在线以及谁不在线的方式通常是这样的:
答案 1 :(得分:2)
您可以截取与离开页面相对应的事件。有几种方法可以做,看看以下链接,让我知道是否有任何适合您的需求,如果我能回答任何更明确的问题:
使用最后一个链接,您可以执行以下操作:
$(window).unload(function() {
//remove the user from your json object with delete json_object[key];
});
希望这有帮助。
答案 2 :(得分:1)
由于您正在使用Socket.io,服务器将知道用户何时离开页面,因为套接字将被断开。只需听取disconnect
事件。
io.sockets.on('connection', function (socket) {
...
socket.on('disconnect', function () {
// The user on `socket` has closed the page
});
});
更好的是,利用命名空间,让Socket.io处理所有连接/断开连接(无论如何都要这样做 - 不需要重复工作)。
在客户端上,
socket = io.connect('http://example.com/pagename');
pagename
无需指向您域中的有效网址 - 它只是您将在服务器代码中使用的命名空间:
io.sockets.clients('pagename')
获取当前连接到pagename
命名空间的所有客户端。