同时向多个客户端提供文件服务

我正在构build一个简单的HTTP服务器,为使用stream的客户端提供相当大的文件。 我需要同时为多个客户提供服务,而且我想知道最简单的方法是什么。

我最初的感觉是使用cluster模块和分派{num CPUs}进程可能是最简单的方法。

 var StreamBrake = require('streambrake'); var http = require('http'); var fs = require('fs'); var server = http.createServer(function(req, res) { var stream = fs.createReadStream('/data/somefile'); stream.pipe(new StreamBrake(10240)).pipe(res); }); server.listen(1234, 10); 

编辑 :澄清,问题是这个代码将不会开始服务第二个客户端,直到它完成服务的第一个。

想到你的问题后,我很困惑,为什么你相信有一个问题。 CreateReadStream是asynchronous的。 下面是一个示例,为了演示使用CreateReadStream,我们确实可以一次处理多个连接,使代码变得复杂一些。

 /*jshint node:true*/ var http = require('http'); var fs = require('fs'); var activeRequests = 0; var launchFiveRequests = 5; http.createServer(function (req, res) { activeRequests++; console.log('Request received'); var readStream = fs.createReadStream('play.js', {'bufferSize': 1024}); readStream.setEncoding('utf8'); readStream.on('data', function (data) { console.log(activeRequests); res.write(data); }); readStream.on('end', function () { res.end(); console.log('end'); activeRequests--; }); }).listen(8080); var options = { hostname: 'localhost', port: 8080, path: '/' }; while(launchTenRequests--) { http.get(options, function(res) { console.log('response received'); }); } 

提供一个足够大的文件,你应该看到所有5个请求都立即生效,并且最终都会相对同时结束。