[英]How to control the number of async http client requests initiated from a stream in node?
我想读取大量的二进制数据流,将其分成较小的部分并执行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代码执行。 有谁能指出我正确的方向?
它看起来像你使用过 。 您可以使用pause
和resume
方法来控制数据流:
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()}
我们在这里所做的是保持当前正在处理的请求数。 当我们开始一个游戏时,如果它使我们达到最大人数,我们将暂停;而当我们开始游戏时,如果我们当前正在暂停,我们将继续。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.