nodejs 如何同时高性能的发送多个请求? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
weishijun14
V2EX    问与答

nodejs 如何同时高性能的发送多个请求?

  •  
  •   weishijun14 2020-09-28 09:04:04 +08:00 2161 次点击
    这是一个创建于 1890 天前的主题,其中的信息可能已经有所发展或是发生改变。

    请教一下,nodejs 不是能用 http.get 发送请求么, 假设我要同时发十个请求,用 http.get 应该要怎么写比较好? 我自己知道的就是用 promise.all , 但是想知道有没有更加高性能的写法 /?

    // 我自己目前的写法: function fetchAll () { http.get('url1').then(); http.get('url2').then(); http.get('url3').then(); http.get('url4').then(); ... http.get('url10').then(); } // 这里的十个请求肯定是并行不阻塞的,所以用起来并没有什么大问题。只是这样看起来 // 不是很优雅。也不知道会不会有什么性能问题。 
    4 条回复    2020-09-28 11:21:12 +08:00
    TomVista
        1
    TomVista  
       2020-09-28 10:26:05 +08:00
    把.then();的内容拆出去,写成函数,不要在 fetchAll 里放一堆,其他没什么.

    要优雅的话,用 node EventEmitter,拆分成观察者模式

    高性能,不用考虑,几十 几百并发 http,一般出问题在网络带宽上,
    ysc3839
        2
    ysc3839  
       2020-09-28 10:39:41 +08:00
    Promise.all 应该是最优解。
    你目前的写法,是因为 then 里面的处理代码完全不同吗?如果是不同的话那这么写也没什么问题了。
    还有要考虑的是使用的 http 库会不会自动复用连接以及是否支持 HTTP/2 。假设你这里的 url 全都是同一个域名,有的 http 库会自动使用同一个 TCP 连接,有的要主动创建一个 session 对象才会复用。会复用连接的情况下,HTTP/1.x 可能会降低性能,但 HTTP/2 则会提高性能。
    追求更高性能的话可能要用 C/C++ 写扩展了。
    weishijun14
        3
    weishijun14  
    OP
       2020-09-28 11:17:12 +08:00
    @TomVista @ysc3839

    感谢楼上大佬们的解答!
    按照解答来说的话,就是没啥大问题了。。。因为目前确实没有很大量的请求。。我先这么写着。。后期要调整的时候再来看看大佬们的方法。。
    zihuyishi
        4
    zihuyishi  
       2020-09-28 11:21:12 +08:00
    我觉得相对于 http 请求本身的时间,这里怎么写应该都不会影响到性能吧。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5726 人在线   最高记录 6679     &nsp; Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 02:06 PVG 10:06 LAX 18:06 JFK 21:06
    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