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

2020-09-28 09:04:04 +08:00
 weishijun14

请教一下,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();
}
// 这里的十个请求肯定是并行不阻塞的,所以用起来并没有什么大问题。只是这样看起来
// 不是很优雅。也不知道会不会有什么性能问题。
1863 次点击
所在节点    问与答
4 条回复
TomVista
2020-09-28 10:26:05 +08:00
把.then();的内容拆出去,写成函数,不要在 fetchAll 里放一堆,其他没什么.

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

高性能,不用考虑,几十 几百并发 http,一般出问题在网络带宽上,
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
2020-09-28 11:17:12 +08:00
@TomVista @ysc3839

感谢楼上大佬们的解答!
按照解答来说的话,就是没啥大问题了。。。因为目前确实没有很大量的请求。。我先这么写着。。后期要调整的时候再来看看大佬们的方法。。
zihuyishi
2020-09-28 11:21:12 +08:00
我觉得相对于 http 请求本身的时间,这里怎么写应该都不会影响到性能吧。

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

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

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

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

© 2021 V2EX