即使在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,它会自动打开,如下所示,

enter image description here

问题为什么我的应用程序在测试性能瓶颈时会继续创建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!');
);

结果:

node-clinic

请记住,您还必须优雅地关闭所有挂起的服务器实例,如此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 承诺会间歇性地失败,即使在处理时也是如此

即使在 node.js 应用程序中使用 body-parser(使用 CORS 和 HTTPS),req.body 在 POST 中仍然为空