如何检测用户已关闭不刷新Nodejs socket.io中的浏览器窗口

时间:2013-08-13 13:54:31

标签: node.js disconnect

我没有得到我问题的确切答案。

许多人将答案写成socket.on('disconnect',function(){}),但它适用于close和refresh。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

这实际上是不可能的,因为服务器不知道断开连接之间的区别。它只知道浏览器关闭了连接,它不知道原因。

但是,您可以通过观察浏览器是否在短时间内重新连接来猜测它是哪一个:

  1. 为每个客户提供一个唯一的ID,存储在您的某个位置 数据库,浏览器将其存储在localStorage中。
  2. 让浏览器在连接时发送ID,如果有ID,则 如果没有请求新的ID。
  3. 在服务器上,在客户端断开连接后设置短暂超时, 也许3秒。
  4. 如果您在超时期间看到具有相同ID的新连接,那么 你可以认为它是一个刷新。如果您没有看到新连接 使用相同的ID,您可以假设浏览器窗口(或选项卡) 闭合。
  5. 但是,这会给您的应用带来一定的复杂性,除非您真的需要知道用户何时点击刷新,否则可能不值得。