使用 websocket 或者 sse 实时更新页面上的展示,长连接会阻塞 http 请求,是不是要分开用一个子域名专门做长连接? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a Javascript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
Javascript 权威指南第 5 版
Closure: The Definitive Guide
miniyao
V2EX    Javascript

使用 websocket 或者 sse 实时更新页面上的展示,长连接会阻塞 http 请求,是不是要分开用一个子域名专门做长连接?

  •  
  •   miniyao 2021-02-13 16:31:24 +08:00 3730 次点击
    这是一个创建于 1753 天前的主题,其中的信息可能已经有所发展或是发生改变。
    页面上要展示实时数据,用轮询达不到时效性要求,改用 websocket 或者 sse 方式长连接,这样服务端就被 socket 的长连接监听阻塞了,正常 http 请求就不能返回,而且前端的负载均衡,和 http 混在一起也不好搞。

    这种 http 服务中,加入 websocket 是不是一般都单独用一个子域名,起单独的服务处理长链接问题?
    15 条回复    2021-02-17 01:04:23 +08:00
    7gugu
        1
    7gugu  
       2021-02-13 16:45:55 +08:00
    你放到别的端口不就好了嘛?不阻塞 80 和 443 就好了啊。
    ferock
        2
    ferock  
    PRO
       2021-02-13 17:25:17 +08:00 via iPhone
    你后端怎么实现的?不会是 fpm 吧
    miniyao
        3
    miniyao  
    OP
       2021-02-13 17:31:02 +08:00
    @7gugu 新开个端口,和开个子域名没区别呀

    @ferock 后端开始是线程池和消息队列的方式,后来发现前端负载均衡不好搞。不行的化,就用个子域名,配置一下跨域估计能行。
    ferock
        4
    ferock  
    PRO
       2021-02-13 17:48:55 +08:00 via iPhone
    @miniyao #3

    不说实现方式怎么讨论?
    telami
        5
    telami  
       2021-02-13 19:51:07 +08:00
    #新开个端口,和开个子域名没区别呀

    怎么会没区别呢
    larry801
        6
    larry801  
       2021-02-13 19:51:22 +08:00
    我这 node 的服务器没事 http 和 websocket 共存 不过没有 LB 量也不大
    sujin190
        7
    sujin190  
       2021-02-13 20:13:29 +08:00 via Android   1
    其实如果只是简单使用还是轮询比较好弄,服务器别立刻返回,有数据再返回,否则一分钟超时一次,配合协程啥的很快就搞定了,还心跳啥啥的网络问题都不用管,又简单又稳定,等其他给数据也好实现,队列、redis 的 subpub 或者啥分布式锁什么的都可以,几分钟就搞出来了
    sujin190
        8
    sujin190  
       2021-02-13 20:14:34 +08:00 via Android
    时效性也妥妥的毫无问题
    cowcomic
        9
    cowcomic  
       2021-02-13 20:17:18 +08:00   1
    有多少并发啊,一台 linux 服务器能提供 6 万多个 socket 连接,剩下的就是每个连接消耗的内存。如果 ws 长连接的并发已经到了万这个量级,那最好是用一个新域名专门处理
    YouLMAO
        10
    YouLMAO  
       2021-02-13 20:43:11 +08:00 via Android
    同一个域名,不同路径,nginx 映射到不同 upstream, ws 的 header 要 upgrade 的
    lihongming
        11
    lihongming  
       2021-02-15 01:46:13 +08:00 via iPhone
    弄个服务专门保持连接,只负责转发消息不处理,自己内部用 mq 之类的东西与负责处理消息的服务交换数据,彻底解偶
    nobird
        12
    nobird  
       2021-02-16 14:26:57 +08:00
    阻塞 80/433 也没问题,你的服务器端不要直接用 webserver 监听 80/433 就行了,单独再写一个转发工具,判断是 http 就给 80/433,如果是 websocket,就转给你的 websocker server....
    lewinlan
    &nsp;   13
    lewinlan  
       2021-02-16 15:14:02 +08:00 via Android
    js 不都是协程吗?奇怪了你这用的什么框架?难道自己处理 socket ?
    abersheeran
        14
    abersheeran  
       2021-02-16 16:15:11 +08:00
    我看标题以为是浏览器对单一域名的最大连接数限制了你,结果点进来一看是服务端限制。咋说呢,你不懂计网,就别为难自己了,HTTP 挺好的,那么多成熟方案你随便抄一个就行了。

    @cowcomic 还有这位五更琉璃的老公,服务端程序进行 accept 不受 65535 最大端口数的限制。所以也不存在什么六万多的连接限制。
    cowcomic
        15
    cowcomic  
       2021-02-17 01:04:23 +08:00
    @abersheeran 是的,这块我记错了,服务端没有端口数量限制,只取决于 CPU 内存资源
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     987 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 22:44 PVG 06:44 LAX 14:44 JFK 17:44
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86