如何控制从节点中的stream发起的asynchronousHTTP客户端请求的数量?

我想读取大量的二进制数据,将其分块成较小的部分并执行PUT。

data.pipe(new BlockStream(1024*1024)).pipe(through(success, end)) function success(data) { var params = {/*host, port, etc...*/ var req = http.request(params, (e, r) => {/*handle response*/}) req.push(data) req.end() } function end() {cb()} 

理想情况下,我希望完成请求之前,移动到下一个,同时不阻止其他JS代码执行。 有人能指出我正确的方向吗?

看起来你正在使用。 您可以使用pauseresume方法来控制数据stream:

 var inProgress = 0; var MAX_IN_PROGRESS = 5; //or whatever number data.pipe(new BlockStream(1024*1024)).pipe(through(success, end)) function success(data) { var params = {/*host, port, etc...*/ inProgress++; if(inProgress == MAX_IN_PROGRESS) { this.pause(); } var that = this; var req = http.request(params, (e, r) => {/*handle response*/}) req.push(data) req.end(function() { inProgress--; if(that.paused) { that.resume(); } }); } function end() {cb()} 

我们在这里做的是保持计数有多less请求正在进行中。 当我们开始一个,我们暂停,如果这使我们达到最大数量,当我们完成一个,我们恢复,如果我们目前暂停。