什么是流处理的背压

时间:2017-01-04 16:28:46

标签: node.js stream pipe backpressure

我开始学习节点和流似乎是你经常使用的东西,在我阅读的大多数文档中都提到了当你处理大尺寸文件时的“背压问题”但我还没有计算清楚地解释这个问题到底是什么。另外我已经读过使用管道可以帮助解决这个问题,管道如何确定背压问题?

感谢提前做出任何解释。

1 个答案:

答案 0 :(得分:1)

背压是指您写入流的速度快于其他进程可以处理/消耗的速度 使用管道,您可以控制流,暂停和恢复流; 这是在nodejs中实现背压的示例

var http = require('http'),
    fs = require('fs');

var server = http.createServer(function(request, response) {
  var file = fs.createWriteStream('upload.jpg'),
      fileBytes = request.headers['content-length'],
      uploadedBytes = 0;

  request.on('data', function(chunk) {
    uploadedBytes += chunk.length;
    var progress = (uploadedBytes / fileBytes) * 100;
    response.write('progress: ' + parseInt(progress, 10) + '%\n');

    var bufferOK = file.write(chunk);

    if (!bufferOK) {
      request.pause();
    }
  });

  file.on('drain', function() {
    request.resume();
  });

  request.on('end', function() {
    response.end('upload complete\n');
  });

});

server.listen(8080);

笨拙的解决方案-来源:https://gist.github.com/benfoster/9543337