【发布时间】:2011-05-05 16:07:29
【问题描述】:
我最近接手了一个项目,该项目使用 COMET 执行一些协作工作并处理一个简单的聊天室。最初编写这个东西的人在 STOMP 和 Oribited 之上组成了一些类来处理所有实际的聊天、消息传递和日志记录。
问题在于,如果用户关闭窗口或导航到不同的页面或出于任何其他原因终止连接,所有其他用户需要一段时间才能看到他已注销。其他用户必须等待退出用户的最后一次 ping 的时间戳超过一定的持续时间,然后才能注册该用户不再连接到系统。
我能想到的解决方案需要在用户离开的 onuload 事件中发送通知,这样它就可以通知所有其他用户而无需等待超时。这样做的问题是,因为 onunload 将在连接完成之前立即终止连接。据我了解,这也是 AJAX 的问题。
现在,我还了解到卸载中的同步请求会延迟窗口关闭/导航,直到请求完成。
所以,我的问题是:有没有人知道在选定实例中临时使彗星请求同步的方法,以便在终止之前有时间完成请求?还是有另一种我没有想到的方法来解决这个问题?感谢您的帮助。
哦,另外,onbeforeunload 也不起作用,因为如果它发送请求并且用户选择“不,我想留在这个页面上”,它已经通知其他用户他已经退出了聊天。
tl;dr:需要一种在 Unload 事件中成功触发 COMET 请求的方法。我们将 STOMP 和 Orbited 用于 COMET。
【问题讨论】:
标签: javascript ajax comet synchronous