WebSocket 应用,用户打开几个网页就会建立几个连接,可后端只支持一个连接

2023 年 8 月 6 日
 richangfan

同一个用户,后端收到新的 WebSocket 连接会关闭旧的,旧的连接所在的网页又没关闭,检测到连接断了会重新连接,然后把新的挤下去,新的再重新连接,又把旧的挤下去,乱套了

3078 次点击
所在节点    前端开发
15 条回复
crysislinux
2023 年 8 月 6 日
如果一定要限制一个时间只有一个连接,那服务端响应新链接的时候给其他客户端发个消息让他们自己下线。
franklinre
2023 年 8 月 6 日
那后端就不要关闭旧的连接,直接显示个错误页面,提示已在其他页面打开。
InDom
2023 年 8 月 6 日
前端同一个域的页面可以相互通讯,可以通过这个来确定有没有页面已经建立连接,如果有就不再建立连接。
est
2023 年 8 月 6 日
后端只支持一个。。你做毛的 websocket 。。。
f9EHtxE2UtX3fG3
2023 年 8 月 6 日
f9EHtxE2UtX3fG3
2023 年 8 月 6 日
@est 点错了
IvanLi127
2023 年 8 月 6 日
后端实现没啥问题,只要让后端在断开前下发断开原因,挤下线不做重连,其他情况退避尝试重连。用户开几次前端页面,前端是不知道的,在跨浏览器甚至系统的时候。
yaott2020
2023 年 8 月 6 日
@est 他的意思应该是一个用户只支持一个 ws 连接
est
2023 年 8 月 6 日
@yaott2020 懂了。。张小龙再世。。。
rabbbit
2023 年 8 月 6 日
让他下线前给你发个通知,然后就不自动重连了.
或者不用 websocket ,前端轮询吧定时请求吧.对前后端来说都省事.
你是得罪后端了吗?
BeautifulSoap
2023 年 8 月 6 日
浏览器可以多标签共享 websocket 的

如果要考虑不同浏览器同时登陆,那你得好好想想后面登陆用户到底该怎么处理
rabbbit
2023 年 8 月 6 日
这样,你问问后端是不是不会区分同用户的不同 websocket 连接,如果是的话跟他商量,在 url 上带个随机数给他.
dandel1on
2023 年 8 月 6 日
前端在 Sec-WebSocket-Protocol 请求头带用户信息,后端在获取子协议或握手阶段检查,如果用户已经有存在连接了就拒绝新连接
ccbikai
2023 年 8 月 6 日
多页面共享一个 SharedWorker ,在里边创建一个 WebSocket ,收到的消息可以转发给所有网页
ccbikai
2023 年 8 月 6 日

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://v2ex.ih06.com/t/962734

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX