请教一下,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();
}
// 这里的十个请求肯定是并行不阻塞的,所以用起来并没有什么大问题。只是这样看起来
// 不是很优雅。也不知道会不会有什么性能问题。
1
TomVista 2020-09-28 10:26:05 +08:00
把.then();的内容拆出去,写成函数,不要在 fetchAll 里放一堆,其他没什么.
要优雅的话,用 node EventEmitter,拆分成观察者模式 高性能,不用考虑,几十 几百并发 http,一般出问题在网络带宽上, |
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++ 写扩展了。 |
3
weishijun14 OP |
4
zihuyishi 2020-09-28 11:21:12 +08:00
我觉得相对于 http 请求本身的时间,这里怎么写应该都不会影响到性能吧。
|