导航离开页面/页面关闭时从用户哈希中删除某人

时间:2012-01-23 15:39:58

标签: javascript node.js socket.io

我正在构建一个Node.js / Socket.io项目。

我有一个基于他们的websocket id的用户哈希。当用户发出以下请求时,我想将它们添加到查看该页面的一组用户中。

app.get('/board/:id', function(req, res){}

我想保留像

这样的东西

浏览= {  用户名:id,  用户名:id,   ... }

然而我不确定如何删除用户让我们说他们是否离开了页面。是否有某种功能在页面休假时被调用?

部分解决方案:

以下似乎可以解决Chrome上的问题:

   $(window).unload(function(){
      var username = $('#username').text();
      var pid = currentProject;

      var data = {
        username: username,
        id : pid
      }

      socket.emit('leaving-page', data);
    })

3 个答案:

答案 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命名空间的所有客户端。