我正在通过创建一个基本的 node.js 应用程序代码来测试流式传输,该代码基本上将文件流式传输到响应。使用此处和此处的代码。
但是,如果我从 发出请求http://127.0.0.1:8000/
,然后打开另一个浏览器并请求另一个文件,则第二个文件将在第一个文件完成之前不会开始下载。在我的示例中,我创建了一个 1GB 的文件。dd if=/dev/zero of=file.dat bs=1G count=1
但是,如果我在第一个文件正在下载时再请求三个文件,则在第一个文件完成后,这三个文件将同时开始下载。
如何更改代码以便它响应每个请求,而不必等待当前下载完成?
var http = require('http');
var fs = require('fs');
var i = 1;
http.createServer(function(req, res) {
console.log('starting #' + i++);
// This line opens the file as a readable stream
var readStream = fs.createReadStream('file.dat', { bufferSize: 64 * 1024 });
// This will wait until we know the readable stream is actually valid before piping
readStream.on('open', function () {
console.log('open');
// This just pipes the read stream to the response object (which goes to the client)
readStream.pipe(res);
});
// This catches any errors that happen while creating the readable stream (usually invalid names)
readStream.on('error', function(err) {
res.end(err);
});
}).listen(8000);
console.log('Server running at http://127.0.0.1:8000/');