即使在Simple NODE JS App中,Active Handles也可以创建但不会被破坏
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了即使在Simple NODE JS App中,Active Handles也可以创建但不会被破坏相关的知识,希望对你有一定的参考价值。
我正在使用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,它会自动打开,如下所示,
问题为什么我的应用程序在测试性能瓶颈时会继续创建Active Handles,如图中第4个图表所示?我需要关闭任何东西吗?我忘了什么吗?
首先,非常感谢这个例子,我正在寻找一个Node.js压力测试工具。
你的例子没有正确设置,request
不适用于Promises。那里有additional packages可以与Bluebird或本地承诺一起使用。
我用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中所示。
以上是关于即使在Simple NODE JS App中,Active Handles也可以创建但不会被破坏的主要内容,如果未能解决你的问题,请参考以下文章
Simple ASP.NET CORE 2.2 App +Vue JS
[Tools] Create a Simple CLI Tool in Node.js with CAC
即使在事件循环中没有要执行的回调,Node.js Web 服务器如何保持运行?
Node.js UnhandledPromiseRejectionWarning 即使在捕获它之后
即使在 node.js 应用程序中使用 body-parser(使用 CORS 和 HTTPS),req.body 在 POST 中仍然为空