CNode

nodejs并发执行ping命令qps没有想象中的高

问答
GGuangGuo发布于10 年前最后回复10 年前4 回复6446 浏览0 收藏

使用 express 和 exec, 每接收到一个 get 请求就执行一次 ping -c 2 www.cnode.com, 然后返回结果

var express = require('express');
var app = express();
var exec = require('child_process').exec;

app.get("/", function (req, res) {
	exec("ping -c 2 www.cnode.com", function (err, stdout, stderr) {
		if(err) throw err;

		res.send(stdout);
	});
});

var server = app.listen(5000);

执行ab测试 ab -c 5 -n 5 http://127.0.0.1:5000/, qps 只有3.89.

Total transferred:      2705 bytes
HTML transferred:       1720 bytes
Requests per second:    3.89 [#/sec] (mean)
Time per request:       1285.671 [ms] (mean)
Time per request:       257.134 [ms] (mean, across all concurrent requests)
Transfer rate:          2.05 [Kbytes/sec] received

裸测 res.send('hello world'), qps 能接近300. 假设有一个应用场景是, 客户端提供 ip 或 url, 然后服务器器端执行 ping 命令并将结果返回. 3.89的 qps 显然远远不够看. 请各位大神指教, 我错在哪里, 以及有没有好的方法.

查看回复

回复 (4)

Y
yjhjstz#1·10 年前

exec 是一个重型的 api .

G
GuangGuo#2·10 年前
引用 yjhjstzexec 是一个重型的 api .

@yjhjstz 有啥好办法没?

Y
yjhjstz#3·10 年前
G
GuangGuo#4·10 年前
引用 yjhjstz用 https://www.npmjs.com/package/net ping 试试?

@yjhjstz thx, 我看看net-ping是怎么写的吧

参与回复
登录后即可参与回复。登录