websokcet中客户端主动关闭问题

发布于 2022-09-04 13:28:46 字数 435 浏览 11 评论 0

请假一下各位社区高手,我用php写了一个socket服务端,然后浏览器用websocket协议连接通讯,实际测试下来,收发消息没有任何问题。但是遇到一个问题,当我的页面关闭时,我服务端的socket并没有立即close。(特别注意,当我的页面关闭时,浏览器的socket还在,因为我后台第一时间收到了他发来的消息,而且是有内容的,只不过是乱码)还要注意的是,我的这种情况和客户端断网,司机是不一样的情况,虽然我的浏览器窗口关闭了,但是我确保socket还存留。
最后等我的浏览器关闭了大概3分钟过后,服务端立马输出日志,有一个socket断开了?

【问题】说了这么多,我就想知道,当我关闭浏览器的一刹那,浏览器上的socket给服务端发了什么东西,是8个字节的内容,输出是乱码。肯定不是四次挥手告别,因为我用tcp抓包工具看过,浏览器关闭的时候那个socket状态没有任何变化,一直是established。而是过了3分钟开始变化的

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

孤蝉 2022-09-11 13:28:46

websocket链接一般都是由服务端主动触发的,即使是客户端触发的,本质上也是先发往服务端一个关闭连接请求,再等待服务端关闭信号。如果客户端在连接过程中异常关闭(由于某种算法或规定,一端直接关闭连接。特指在open handshake打开连接阶段,底层连接丢失导致的连接中断),服务端是无法知道这种情况的。
websocket服务端是无法获知客户端异常关闭的状态的,服务端或者客户端需要定时做心跳检测来判断连接状态。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文