NodeJS:我是否需要结束HTTP请求以节省内存/ CPU?

时间:2016-01-11 22:42:24

标签: javascript node.js node-request

我在Node和Express中编写了一个程序,使用Request连接到API并下载了一堆数据(想想3,000个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或超时错误,我认为问题可能就是我的代码处理所有这些请求的方式。

我已将它们在超时队列中进行批处理,因此请求发生的速度相对较慢,它有点帮助,但并不能完全解决问题。

我是否需要销毁身体/响应对象以释放内存或什么?

1 个答案:

答案 0 :(得分:2)

我遇到过与我正在使用的API类似的问题,最终出现了一些建议 - 速率限制。有些API不会在速率限制上返回可读错误,因为它们会为每个客户端提供一定数量的资源,当您全部使用它们时,它们甚至无法向您发送错误的响应。

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

我通过使用我自己的代码嘲笑API,将其置于网络中以便最大化相似性,并且因为我的模拟代码没有做任何事情,我回答了它,我从未在NodeJS服务器中遇到任何错误

然后我在需要时给它做了一些倒计时和超时。

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