今天,当我尝试在 NodeJs 中实现一个使用异步/同步 I/O 方法的示例时,我遇到了一个奇怪的问题。当我尝试使用 发送请求时ab
,我在 Async 方法中收到此错误:
{ [Error: EMFILE, open 'sample.txt'] errno: 20, code: 'EMFILE', path: 'sample.txt' }
但同步模式下的相同功能运行良好,没有任何错误。
这是我ab
运行测试的命令:
ab -n 10000 -c 1000 -vhr http://localhost:8080/
这是我的两个代码:
异步:
http.createServer(function (req, res) {
fs.readFile('sample.txt', function (err, data) {
if(err) {
res.writeHead(500, {'Content-Type': 'text/plain'});
res.end();
console.log(err);
} else {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end(data);
}
});
}).listen(8080, '127.0.0.1');
同步:
http.createServer(function (req, res) {
var fileOutput = fs.readFileSync('sample.txt').toString();
if(!fileOutput) {
res.writeHead(500, {'Content-Type': 'text/plain'});
res.end('Error in reading the file.');
} else {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end(fileOutput);
}
}).listen(8081, '127.0.0.1');
怎么了?使用异步方法有什么问题吗?