繁体   English   中英

如何控制从节点中的流发起的异步http客户端请求的数量?

[英]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代码执行。 有谁能指出我正确的方向?

它看起来像你使用 您可以使用pauseresume方法来控制数据流:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM