2016-01-11 52 views
3

我已经写在节点和快速的程序,使用Request连接到API并下载一组数据(3000个思API请求)(内的所有API,你要知道的使用限制)。NodeJS:我需要结束HTTP请求来节省内存/ CPU吗?

当码头工人容器中运行这个,我得到了很多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或超时错误的,我认为这个问题可能是我的代码是这样的处理所有这些请求。

我已经分批他们在超时队列所以请求发生相对缓慢,它可以帮助一点点,但并不能完全解决问题。

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

+0

澄清:您是否立即发送所有请求?你有没有考虑限制并发请求的数量(例如与异步) – h0ru5

+0

你很可能遇到与你调用的API供应问题 –

+0

@ h0ru5我做了类似的事情,因为我创建了一个队列数组和一个循环的脚本,每5秒钟执行25个呼叫。 – Jascination

回答

2

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

发生这种情况,即使我已经住每天公布的利率范围之内,但原来,他们是每分钟一个不成文的限制(或更像是 - 只是无法处理如此多的请求)。

虽然我用自己的代码嘲笑了API,但将它放在网络中以便最大限度地发挥相似性,并且我的模拟代码没有做任何事情,所以我从来没有在NodeJS服务器中发现任何错误。

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

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