7
Nodejs
Calvin Xiao edited this page 2013-12-19 23:35:11 -08:00
This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Node.js 性能测试模拟器

Why

性能测试时可能需要一些系统外的被依赖服务的模拟器常用性能测试工具如JMeter并没有模拟Server端的能力。如果是另外起个Tomcat写些简单的模拟器——性能与容量是一个问题因为被测试服务器集群可能有二十台机器而跑模拟器的机器可能只有一两台。另一个是如果要快速修改输出内容Tomcat的打包上传部署流程略显麻烦。

所以看上了Node.js。

另一个选择是DreamHead同学拿了Java Duke大奖登上时代广场大屏幕的Moco可以用一段JSON控制模拟器的返回。

How

Node.js的最简单版很吸引人相信大部分人都是被下面的例子骗上贼船的。

var http = require("http");

http.createServer(function(request, response) {
  response.writeHead(200, {"Content-Type": "text/plain"});
  response.write("Hello World");
  response.end();
}).listen(8888);

用node.js simple.js即可运行这个Web服务器。所以Node.js 是一个用JavaScript编写业务的服务器。

Then?

上面的例子虽然爽但真正作为模拟器水就开始深了springside的support/node.js/static-response.js是返回相同的静止内容的完整示例。

1. 基于Cluster模块使用所有CPU

Node.js默认只起一个进程使用一个CPU core这显然浪费了。因此可以Cluster文档的示例代码改造成按CPU核数量启动Node.js进程在我的双核超线程的笔记本上就fork出了4条子进程。

2. Counter计算

因为现在多进程了计算Counter也成了麻烦事情Cluster文档又给出了示例代码,居然需要进程间通讯......

3. 定时打印Counter

设定定时器还是很简单的只要调一句setInterval(function, interval)

打印日期时发现,自带函数居然不支持格式化日期,不想引入第三方库就只好写成这样,勉强也能出来 "2013-6-4 120002" 这样的效果。

new Date().toISOString().replace(/T/, ' ').replace(/\..+/, '') 

And Then

然后还有一堆问题呀比如要返回动态内容根据请求的url参数xml/json内容返回相应xml/json格式结果要一个模拟器应答多种请求是不是要把Express拿出来用?

参考资料

joyent上的modules大全 joyent其实是node.js背后的公司分类列了很多modules但良莠不齐又没有评分。 [Node.js上的npm registry] (https://npmjs.org/) 有评分但没分类。