我正在研究 HTML5 WebSockets。我想知道如何优雅地关闭连接?例如,如果用户刷新页面或只是关闭浏览器会发生什么?
当用户只是刷新页面而不调用时,会出现奇怪的行为websocket.close()
- 当他们在刷新后返回时,它会击中websocket.onclose
event.
根据协议规范v76(当前支持的浏览器实现的版本):
为了干净地关闭连接,一个仅包含 0xFF 字节的帧
随后从一个对等点发送一个 0x00 字节,询问另一个对等点
关闭连接。
如果您正在编写服务器,则应确保在服务器关闭客户端连接时发送关闭帧。正常的 TCP 套接字关闭方法有时可能会很慢,并导致应用程序认为连接仍然打开,即使它没有打开。
当您关闭或重新加载页面时,浏览器确实应该为您执行此操作。但是,您可以通过捕获 beforeunload 事件来确保发送关闭帧:
window.onbeforeunload = function() {
websocket.onclose = function () {}; // disable onclose handler first
websocket.close();
};
我不确定页面刷新后如何获得 onclose 事件。一旦页面重新加载,websocket 对象(带有 onclose 处理程序)将不再存在。如果您在页面加载时立即尝试在页面上建立 WebSocket 连接,那么您可能会遇到这样的问题:在旧连接断开后(或者浏览器尚未准备好),服务器很快就拒绝新连接在您尝试连接的点建立连接)并且您将收到新 websocket 对象的 onclose 事件。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)