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

289 天前
 richangfan

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

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

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

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

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

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

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

© 2021 V2EX