我正在使用最新版本的Node 10.10.0,下面是我要执行的代码的小部分。
var fs = require('fs');
const express = require('express');
const request = require('request');
const app = express();
async function fun1(req, resp){
let response = await request.get('http://google.com');
if (response.err) { console.log('error');}
else { resp.send('fetched response'); };
}
app.get('/', (req, res) => {
fun1(req, res);
});
app.listen(3000, () => {
console.log('Example app listening on port 3000!');
});
我也正在使用诊所医生来check performance bottleneck for above code。
我正在运行以下命令;
clinic doctor --on-port 'autocannon -c100 localhost:3000' -- node index.js
执行上述命令后,我进入控制台输出以下。
Example app listening on port 3000!
Running 10s test @ http://localhost:3000
100 connections
Stat Avg Stdev Max
Latency (ms) 94.72 75.87 1077.87
Req/Sec 827 257.35 1248
Bytes/Sec 180 kB 55.7 kB 270 kB
9k requests in 11s, 1.96 MB read
9 errors (0 timeouts)
Analysing data
Generated HTML file is 3884.clinic-doctor.html
You can use this command to upload it:
clinic upload 3884.clinic-doctor
我也生成了一个不错的UI,它会如下自动打开
问题 为什么我的应用程序在经过性能瓶颈测试后仍然继续创建活动句柄(如图像的第4个图表所示)?我需要关闭任何东西吗?我忘了什么吗?
答案 0 :(得分:0)
首先,非常感谢这个示例,我正在寻找一个Node.js压力测试工具。
您的示例设置不正确,request
不适用于Promises。有additional packages个可与Bluebird或本地Promise一起使用的
我已使用async / await
调整了您的示例:
const express = require('express');
const request = require('request-promise-native');
const app = express();
function fun1(req, resp) {
return request.get('http://google.com');
}
app.get('/', async (req, res) => {
try {
await fun1();
res.send('fetched response');
} catch (error) {
res.send('error')
}
});
app.listen(3000, () => {
console.log('Example app listening on port 3000!');
});
结果:
请记住,您还必须正常关闭所有挂起的服务器实例,如本StackOverflow question所示。