Javascript 阻止代理使用的套接字
我正在抓取一个API。有很多要求。如果我做了太多的请求,API一开始看起来很可疑,我会得到一堆503。没关系,当我得到一个503时,我已经在重新运行请求之前设置了一个计时器,并且对于同一个请求的每个503,这个计时器由两个定时器供电 但它不起作用。因为我的计时器是异步的。当我得到503时,在启动这个计时器之后,节点立即重用套接字处理挂起的请求。所以我的计时器基本上不会改变任何东西 我怎样才能防止这种情况 到目前为止,我所尝试的: 在重新启动请求之前使用settimeout 使用同步模块,其暂停不起作用,因为光纤是异步的Javascript 阻止代理使用的套接字,javascript,node.js,Javascript,Node.js,我正在抓取一个API。有很多要求。如果我做了太多的请求,API一开始看起来很可疑,我会得到一堆503。没关系,当我得到一个503时,我已经在重新运行请求之前设置了一个计时器,并且对于同一个请求的每个503,这个计时器由两个定时器供电 但它不起作用。因为我的计时器是异步的。当我得到503时,在启动这个计时器之后,节点立即重用套接字处理挂起的请求。所以我的计时器基本上不会改变任何东西 我怎样才能防止这种情况 到目前为止,我所尝试的: 在重新启动请求之前使用settimeout 使用同步模块,其暂停不
有什么想法吗 我终于得出结论,现在是不可能的 为了防止大规模泛滥,我使用异步模块的队列对象。代码是这样的:
var queue = new Sync.Queue( function ( task, markAsComplete ) {
Http.request( {
agent : false, // we will use our own rate limiter, so we don't need agents
...
}, function ( err, res ) {
res.on( 'end', function ( ) {
if ( IS_503 ) {
var originalConcurrency = queue.concurrency; // saving the original concurrency
queue.concurrency = 1; // our timeout will now stop every request
setTimeout( function ( ) {
queue.concurrency = originalConcurrency; // restoring the concurrency
queue.push( task );
markAsComplete( );
}, 1000 );
}
} );
} );
}, numberOfParallelRequests );