区分浏览器关闭事件和注销

时间:2016-03-18 17:23:23

标签: javascript java jquery spring

1)我需要满足以下要求: 客户端的请求(长时间运行的进程)应该等到服务器提供请求。

当前解决方案: 客户端每隔5秒发起一次请求,然后发出ping请求,以检查请求状态和 与此同时也维持会议。

2)如果客户端移动到应用程序中的其他选项卡并返回,则客户端仍应显示进程状态,服务器应继续处理请求。

3)如果客户端关闭浏览器或注销,服务器应该停止该过程。

PS:在IE-9,Chrome和Firefox之后需要所有浏览器的功能。

2 个答案:

答案 0 :(得分:1)

有许多方法可以给猫皮肤,但这就是我要完成它的方法。

1,为请求分配唯一标识符(您很可能已经这样做了,因为您每隔几秒就会请求就绪状态)。

将会话数据的成员设置为唯一ID。

设置所有页面以加载所需的JS以持续检查进程,但JS不应使用任何标识符。

在解析ajax请求的脚本中,让它检查会话中的唯一标识符,并使用上次请求的时间和唯一标识符更新内部系统(文件或数据库)。 如果有要推送的细节,请推回详细信息。

在另一个系统(如cron系统)或进程本身内(例如,如果在循环中),它会检查使用唯一标识符和最后一个时间戳的时间戳更新的同一数据库或文件系统。如果时间戳太旧,让我们说15秒(记住页面加载时间可能会延迟5秒间隔),然后在cron的情况下终止进程,或者在进程脚本本身内自杀进程。

注销将终止会话数据,从而无法更新表/文件(并且应该对此进行检查),这将使得在注销后的几秒内,进程停止。 / p>

答案 1 :(得分:0)

您将无法找到可靠的退出解决方案。 window.onbeforeunload将不允许您与服务器通信(您只能使用内置对话框提示用户,而且几乎就是这样)。也许,不是找到捕获注销/放弃的解决方案,而是在服务器的进程中添加一些逻辑来等待那些ping(可能在放弃之前允许30秒的无通知);这样你就不会浪费太多的服务器周期,你仍然可以像以前一样监控。