V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
richangfan
V2EX  ›  前端开发

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

  •  
  •   richangfan · 2023-08-06 06:47:53 +08:00 · 2212 次点击
    这是一个创建于 473 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    15 条回复    2023-08-06 20:26:41 +08:00
    crysislinux
        1
    crysislinux  
       2023-08-06 07:12:20 +08:00
    如果一定要限制一个时间只有一个连接,那服务端响应新链接的时候给其他客户端发个消息让他们自己下线。
    franklinre
        2
    franklinre  
       2023-08-06 08:31:01 +08:00   ❤️ 1
    那后端就不要关闭旧的连接,直接显示个错误页面,提示已在其他页面打开。
    InDom
        3
    InDom  
       2023-08-06 08:42:18 +08:00
    前端同一个域的页面可以相互通讯,可以通过这个来确定有没有页面已经建立连接,如果有就不再建立连接。
    est
        4
    est  
       2023-08-06 10:26:13 +08:00   ❤️ 7
    后端只支持一个。。你做毛的 websocket 。。。
    ccagml
        5
    ccagml  
       2023-08-06 10:39:04 +08:00 via Android
    ccagml
        6
    ccagml  
       2023-08-06 10:40:12 +08:00 via Android
    @est 点错了
    IvanLi127
        7
    IvanLi127  
       2023-08-06 10:51:30 +08:00 via Android   ❤️ 1
    后端实现没啥问题,只要让后端在断开前下发断开原因,挤下线不做重连,其他情况退避尝试重连。用户开几次前端页面,前端是不知道的,在跨浏览器甚至系统的时候。
    yaott2020
        8
    yaott2020  
       2023-08-06 12:33:29 +08:00 via Android   ❤️ 1
    @est 他的意思应该是一个用户只支持一个 ws 连接
    est
        9
    est  
       2023-08-06 13:04:16 +08:00
    @yaott2020 懂了。。张小龙再世。。。
    rabbbit
        10
    rabbbit  
       2023-08-06 13:24:00 +08:00
    让他下线前给你发个通知,然后就不自动重连了.
    或者不用 websocket ,前端轮询吧定时请求吧.对前后端来说都省事.
    你是得罪后端了吗?
    BeautifulSoap
        11
    BeautifulSoap  
       2023-08-06 13:32:57 +08:00 via Android   ❤️ 1
    浏览器可以多标签共享 websocket 的

    如果要考虑不同浏览器同时登陆,那你得好好想想后面登陆用户到底该怎么处理
    rabbbit
        12
    rabbbit  
       2023-08-06 13:34:12 +08:00
    这样,你问问后端是不是不会区分同用户的不同 websocket 连接,如果是的话跟他商量,在 url 上带个随机数给他.
    caiqichang
        13
    caiqichang  
       2023-08-06 16:14:14 +08:00
    前端在 Sec-WebSocket-Protocol 请求头带用户信息,后端在获取子协议或握手阶段检查,如果用户已经有存在连接了就拒绝新连接
    ccbikai
        14
    ccbikai  
       2023-08-06 20:25:20 +08:00 via iPhone
    多页面共享一个 SharedWorker ,在里边创建一个 WebSocket ,收到的消息可以转发给所有网页
    ccbikai
        15
    ccbikai  
       2023-08-06 20:26:41 +08:00 via iPhone
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   966 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 20:48 · PVG 04:48 · LAX 12:48 · JFK 15:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.