gpt4 book ai didi

javascript - 一个简单的 Node.JS 基准测试

转载 作者:行者123 更新时间:2023-11-30 00:04:27 26 4
gpt4 key购买 nike

我正在尝试确定这是否是一个公平的基准。目标是尝试查看 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com