2

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役立つ場合は、ダウンロード クライアントを で調整しました。

4

1 に答える 1

3

part.pipe(downloadRequest)バッファがいっぱいになったときの一時停止/再開を自動的に処理する必要があります。

于 2013-02-12T00:54:05.867 に答える