Node.js限制stream
我正在尝试创build一个Node.js HTTP文件stream媒体服务器。 我想要做到以下几点:
发件人--HTTP POST-->
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进程将整个文件保存在内存中,直到下载客户端完成。
我怎样才能调节上传者的速度? 我想我可以暂时停止他的stream,但我怎么知道下载器的stream/缓冲区是否填满?
PS:我扼杀了下载客户端wget --limit-rate=100k
,如果有帮助。
当缓冲区满时, part.pipe(downloadRequest)
应该自动处理暂停/恢复。