大佬们,开发环境中如果使用 websocket/tcp 协议,假如有一万个链接,如何保证这些链接保持畅通呢(高并发)? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
Acoolda
V2EX    程序员

大佬们,开发环境中如果使用 websocket/tcp 协议,假如有一万个链接,如何保证这些链接保持畅通呢(高并发)?

  •  
  •   Acoolda 2019-11-22 10:47:50 +08:00 2773 次点击
    这是一个创建于 2238 天前的主题,其中的信息可能已经有所发展或是发生改变。

    开发过程中使用了 websocket 协议,假如有大量链接(合理的,非可以攻击的),如何保证这些链接时刻通畅呢(客户端不故意断开),如何管理这些链接,保证时刻有效。我有看到网上一些管理 tcp 链接的,基本上都是开子线程管理用户链接,但是我觉的这个基本没什么实践意义,而且都是大家抄来抄去,向请问一下你们的想法和思路


    条件

    • 机器性能相同进程线程内存什么的都是固定不变的( 我们忽略服务器配置 )
    • 用户请求是合理的,不存在什么非法请求
    • 保证尽可能多的用户 tcp/websocket 请求能正常链接上服务器( 通常说的高并发 )
    • 保证服务器能及时(1s 内吧 )响应在线的任意一个用户
    • 不讨论用户忘记关闭链接的情况
    • 请说明一下原理和思路方便大家一起讨论(无需代码,伪代码即可)
    kiracyan
        1
    kiracyan  
       2019-11-22 10:53:58 +08:00   1
    C10K ?
    Acoolda
        2
    Acoolda  
    OP
       2019-11-22 11:10:27 +08:00
    @kiracyan 我孤陋寡闻了,百度了一下才知道啥意思,差不多就是这个问题了,我想知道大佬们实践方案
    fancy111
        3
    fancy111  
       2019-11-22 11:16:51 +08:00
    swoole 和 nodejs 就很好的解决了这个问题,当然是用多进程或协程处理多个连接,毕竟用户不是每时每刻都发送数据。
    xiaotianhu
        4
    xiaotianhu  
       2019-11-22 11:25:47 +08:00
    每个开发语言都有对应的框架解决问题啊。
    一般都是基于 libevent 事件+异步 就搞定了。
    bobuick
        5
    bobuick  
       2019-11-22 12:41:36 +08:00
    这要求不高. 现在随便拉出来各类语言实现的一些网络库都能达到了. 你也可以自己用 c,或者 cpp 撸一个简单的, 不复杂. 这方面很多开源的最基础的实现, 拿过来自己看看.
    下层用 epoll, 我估计单个线程 accept, 然后放线程池里挂载 epoll 进行 epol_ctl 都能达到你要的性能.

    已经封装号的多如牛毛, go 的随便 C100k, java 的 netty 也随便能到. 前提是你只是个网络层, 如果把其他逻辑加就另外一回事了
    0ZXYDDu796nVCFxq
        6
    0ZXYDDu796nVCFxq  
       2019-11-22 12:52:39 +08:00 via Android
    C10K 十年前就解决了br />你只需要了解下调用哪些系统接口或者使用哪个库
    sagaxu
        7
    sagaxu  
       2019-11-22 13:09:29 +08:00 via Android
    10 年前,处理 C10K 还要点编程技巧。现在嘛,傻乎乎的开 10K 个 Java 线程也就多用个 2.5G 内存。协程或者 async/await 方案已经烂大街,C10K 也早换成 C10M 了。
    ipwx
        8
    ipwx  
       2019-11-22 13:14:45 +08:00 via Android
    asio, epoll, kqueue。或者基于这些的库。基本思想是非阻塞,在一个线程里面和尽可能多的客户端通讯。计算交给线程池。
    opengps
        9
    opengps  
       2019-11-22 13:17:49 +08:00 via Android
    现在做 socket 开发的资料比以前多多了,这些公开资料已经解决了楼主考虑的问题。
    关于链接的保活,依赖的是客户端心跳包协议和服务端 keepalive
    Acoolda
        10
    Acoolda  
    OP
       2019-11-22 13:50:14 +08:00
    @bobuick 懂了懂了,是我想多了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     916 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 20:56 PVG 04:56 LAX 12:56 JFK 15:56
    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