3

我用 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或超时错误,我认为问题可能是我的代码处理所有这些请求的方式。

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

我是否需要销毁身体/响应对象以释放内存或其他东西?

4

1 回答 1

2

我在使用的 API 中遇到了类似的问题,最终成为这里的一些建议 - 速率限制。某些 API 不会返回有关速率限制的可读错误,因为它们为每个客户端提供一定数量的资源,并且当您用完它时,它们甚至无法向您发送错误的响应。

即使我每天都保持在发布的速率限制范围内,这种情况也会发生,但结果发现它们每分钟有一个不成文的限制(或者更像 - 只是无法处理这么多请求)。

我通过用我自己的代码模拟那个 API 来回答这个问题,将它放在网络中以便最大限度地提高相似性,并且由于我的模拟代码没有做任何事情,我在 NodeJS 服务器中从来没有遇到任何错误。

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

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

于 2016-01-11T22:54:01.537 回答