我使用mikeal/request来进行API调用.我最频繁使用的API之一(Shopify API).最近推出了一个新的通话限制,我看到的错误如下:
Exceeded 6.0 calls per second for api client. Slow your requests or contact support for higher limits.
Run Code Online (Sandbox Code Playgroud)
我已经进行了升级,但无论我获得多少带宽,我都必须考虑到这一点.对Shopify API的大多数请求都在async.map()函数中,这些函数循环异步请求并收集正文.
我正在寻找任何帮助,也许是一个已经存在的库,它将包裹请求模块并实际阻塞,休眠,限制,分配,管理,同步发出的许多同时请求并限制它们6在一时间 如果不存在这个项目,我没有问题.我只是不知道如何处理这种情况,我希望有某种标准.
我用mikeal/request做了一张票.
我正在使用异步模块的组合并行地抓取与请求模块的许多链接.
我注意到很多和错误,虽然链接可以访问并使用chrome快速响应.ETIMEDOUTESOCKETTIMEDOUT
我在请求选项中限制maxSockets为2和timeout10000.我使用async.filterLimit()的是2的限制,甚至每次都将并行性降低到2个请求.所以我有2个套接字,2个请求,以及10秒的超时等待来自服务器的标头响应但我得到了这些错误.
这里;我使用的请求配置:
{
...
pool: {
maxSockets: 2
},
timeout: 10000
,
time: true
...
}
Run Code Online (Sandbox Code Playgroud)
这是我用来链接的代码片段:
var self = this;
async.filterLimit(resources, 2, function(resource, callback) {
request({
uri: resource.uri
}, function (error, response, body) {
if (!error && response.statusCode === 200) {
...
} else {
self.emit('error', resource, error);
}
callback(...);
})
}, function(result) {
callback(null, result);
});
Run Code Online (Sandbox Code Playgroud)
我听了错误事件,我看到每当错误代码是ETIMEDOUT连接对象是真/假,所以有时它是连接超时,有时它不是(根据请求文档)
更新:
我决定提升maxSockets至,Infinity …