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