我正在尝试确定这是否是一个公平的基准。目标是尝试查看 Node.JS 可以处理多少并发连接与各种大小的有效负载。代码如下。
var express = require('express');
var Sequelize = require('sequelize');
var fs = require('fs');
var app = express();
var data;
var filename = process.argv[2] || './start.json';
console.log("Using: " + filename);
data = fs.readFileSync(filename);
var blockSize = 250000;
app.get('/start', function (req, res) {
// Break up data in blocks. Works to super high concurrents.
// for(var i = 0; i < data.length; i+=blockSize)
// res.write(data.slice(i, i+blockSize));
// Can only handle about 600 concurrent requests if datasize > 500KB
res.send(data);
});
app.listen(3000, function () {
console.log('Listing on 3000.');
});
如评论中所述,如果负载大小大于约 500KB 并且有 500 个并发,它将在负载测试客户端获得“对等连接重置”。如果您将数据切片并以 block 的形式写入,它可以在开始之前存活到更高的并发。股票 Node 和 express 都表现出这种行为。
最佳答案
data = fs.readFileSync(filename);
同步方法是 nodejs killer 。它实际上阻塞了 ALL 请求的事件循环,使性能非常糟糕。
试试这个:
var express = require('express');
var Sequelize = require('sequelize');
var fs = require('fs');
var app = express();
var filename = process.argv[2] || './start.json';
var blockSize = 250000;
app.get('/start', function (req, res) {
// Break up data in blocks. Works to super high concurrents.
// for(var i = 0; i < data.length; i+=blockSize)
// res.write(data.slice(i, i+blockSize));
// Can only handle about 600 concurrent requests if datasize > 500KB
console.log("Using: " + filename);
fs.readFile(filename, function (err, data) {
if (err) throw err;
res.send(data);
});
});
app.listen(3000, function () {
console.log('Listing on 3000.');
});
关于javascript - 一个简单的 Node.JS 基准测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39065857/