如何在页面关闭时可靠地运行代码(例如,网站聊天中的“断开连接”消息)

How to reliably run code on page close (e.g. "disconnected" message on site chat)

本文关键字:聊天 网站 断开 消息 断开连接 连接 例如 运行 代码      更新时间:2023-09-26

我有一个两人的网站聊天(我们和任何有问题的客户),当他们通过任何方式断开连接时,我想显示"$client已断开连接",包括:

  • 在浏览器上按返回
  • 关闭窗口
  • 通过任务管理器关闭浏览器

我还没有找到一种可靠的方法(尝试使用JavaScript的onunload和onbeforunload属性)来处理这一问题,尤其是在使用任务管理器的情况下。

我想做的是让用户不断调用AJAX脚本,在那里他们增加一些服务器端值;当他们的页面关闭时,这种增量将停止。在我们这边,继续运行一个脚本来检查该值是否已更改。如果在任意次数的检查(例如3次)后它没有改变,那么用户可能已经断开连接,它将显示消息。

但这并没有什么优雅之处,"可能是脱节的"也不是一个真正有把握的结论。

如何做到这一点,以确保只有在用户断开连接时才会出现断开连接消息。

实际上,你不能在HTML/JS/CSS上真正实现这一点,一旦用户离开,他们就会断开连接。。也就是说没有效率。

你可以尝试降低轮询之间的间隔,但这会消耗带宽并降低性能(持续的轮询就像一个永远的循环)

他们称之为彗星,这是一个包含"恒定连接"方法的术语,其中之一就是轮询。文章中还介绍了"中间人"方法,您可以使用flash等插件及其流媒体功能。

相关文章: