【问题标题】:Node.js throttle streamsNode.js 限制流
【发布时间】:2013-01-27 03:06:21
【问题描述】:

我正在尝试创建一个 Node.js HTTP 文件流服务器。我想做以下事情:

发送者--HTTP POST-->Node.js HTTP 服务器<--HTTP GET--接收者

我已经使用以下代码:

var app = express();

// ...

app.post('/upload', function (req, res) {

  // Get the `req` and `res` arguments of the HTTP GET request
  var downloadRequest = getDownloadClientRequest();

  // parse a file upload
  var form = new formidable.IncomingForm();
  form.onPart = function (part) {
    if (!part.filename) {
      // let formidable handle all non-file parts
      form.handlePart(part);
      return;
    }

    downloadRequest.res.writeHead(200, {
      'Content-Disposition': 'attachment; filename=' + part.filename
    });

    part.on('data', function(data) {
      downloadRequest.res.write(data);
    });
    part.on('end', function() {
      downloadRequest.res.end();
    });
  };

  form.parse(req, function (err, fields, files) {
    res.writeHead(200);
    res.write('Successfully streamed');
    res.end();
  });
});

app.get('/download', function (req, res) {
  storeDownloadClientRequest(req, res);
});

显然发生的情况是,如果上传客户端比下载客户端快得多,则上传完成速度非常快,并且我的 Node.js 进程将整个文件保存在内存中,直到下载客户端完成为止。

如何限制上传者的速度?我想我可以不时暂停他的流,但我怎么知道下载器的流/缓冲区是否已满?

PS:如果有帮助,我会使用 wget --limit-rate=100k 限制下载客户端。

【问题讨论】:

    标签: node.js http stream express


    【解决方案1】:

    part.pipe(downloadRequest) 应在缓冲区已满时自动处理暂停/恢复。

    【讨论】:

      猜你喜欢
      • 2022-01-16
      • 1970-01-01
      • 1970-01-01
      • 2015-11-05
      • 1970-01-01
      • 2014-03-17
      • 1970-01-01
      • 2011-05-03
      • 2016-04-29
      相关资源
      最近更新 更多