NodeJS:我需要结束HTTP请求来节省内存/CPU吗

NodeJS: Do I need to end HTTP requests to save memory/CPU?

本文关键字:节省 内存 CPU 请求 HTTP 结束 NodeJS      更新时间:2023-09-26

我在Node和Express中编写了一个程序,使用请求连接到API并下载了一组数据(比如3000个API请求)(请注意,所有这些都在API的使用限制范围内)。

在Docker容器中运行时,我会遇到很多getaddrinfo ENOTFOUND错误,我想知道这是否是资源问题。我的请求是这样的:

request.get(url, function(err, resp, body){
  // do stuff with the body here, 
  // like create an object and handball to a worker function
});

对于最初的几百个请求,这总是很好的,但后来我会收到很多ENOTFOUND或超时错误,我认为问题可能是我的代码处理所有这些请求的方式。

我已经将它们分批放入一个超时的队列中,所以请求发生的速度相对较慢,这有点帮助,但并不能完全解决问题。

我需要销毁主体/响应对象以释放内存或其他什么吗?

我在使用API时遇到过类似的问题,最终达到了这里的一些建议——速率限制。有些API在速率限制下不会返回可读错误,因为它们为每个客户端提供了一定数量的资源,当你用完所有资源时,它们甚至不会向你发送错误的响应。

尽管我每天都保持在公布的费率限制范围内,但事实证明,他们每分钟都有一个不成文的限制(或者更像是——无法处理这么多请求)。

不过,我的回答是用我自己的代码嘲笑API,把它放在网络中,这样它就可以最大限度地提高相似性。由于我嘲笑的代码什么都没做,我在NodeJS服务器上从来没有出现过任何错误。

然后我在需要的时候倒计时和暂停。

我建议你也这样做。记住,他们有每小时的限制,并不意味着他们没有不同的每秒/分钟限制。