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

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

许多人写的答案是socket.on('disconnect',function(){}),但它适用于closures和刷新。

任何想法?

这是不可能的,因为服务器不知道断开连接的区别。 所有它知道的是,浏览器closures了连接,它不知道为什么。

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

  1. 为每个客户端提供一个唯一的ID,存储在数据库的某个位置,然后浏览器将其存储在localStorage中。
  2. 让浏览器在连接时发送ID(如果有),如果没有则请求新的ID。
  3. 在服务器上,客户端断开连接后可能需要设置一个短暂的超时时间,可能是3秒。
  4. 如果您在该超时期间看到具有相同ID的新连接,则可以认为这是刷新。 如果您没有看到具有相同ID的新连接,则可以假定浏览器窗口(或选项卡)已closures。

但是,这会给您的应用程序带来一些复杂的问题,除非您真的需要知道用户什么时候刷新,否则可能不值得麻烦。