2

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

许多人将答案写为 socket.on('disconnect', function() {}),但它适用于关闭和刷新。

任何想法?

4

1 回答 1

1

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

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

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

但是,这会增加您的应用程序的一些复杂性,并且可能不值得麻烦,除非您真的需要知道用户何时点击刷新。

于 2013-08-13T17:58:34.863 回答