我有一个HTML5应用程序,当用户更改/刷新页面时需要发送断开连接的ajax请求。我目前正在使用此代码:
usemask =True
我不需要处理响应,甚至不需要确保浏览器收到响应。我的问题是,我可以依赖接收请求的服务器吗?
如果没有,我该如何做到这一点?目前我有应用程序发送“我还活着!”请求每15秒(已经感觉太多了)。我希望服务器知道用户断开连接的第二个。
为了澄清,我知道如果浏览器/计算机崩溃,我无能为力。这就是心跳的意义所在。我的意思是在正常用例中,当用户关闭/更改/刷新页面时。
答案 0 :(得分:2)
你不能100%依靠ajax呼叫通过。您可以测试许多浏览器和操作系统,并确定在页面拆除之前通常会发送哪些ajax调用,但不保证任何规范都这样做。
您正在使用的心跳是最常见的解决方法。这也将包括您丢失网络连接或掉电或计算机睡眠模式或浏览器崩溃,beforeunload
处理程序不会。
我见过的另一个解决方法是使用socket.io连接到服务器。由于socket.io连接具有小而非常有效的心跳,并且服务器将在页面关闭时看到套接字关闭,因此您将通过心跳看到异常关闭,从而实现两全其美并且您将通过webSocket连接立即看到正常关闭。