ClusterPlus-v0.2.0——让node.js像php那样写代码

项目地址:(目前第二版:v0.2.0)

https://github.com/DoubleSpout/ClusterPlus(2011.12.27日不能使用bug已经修复)

前面一篇博客已经谈到ClusterPlus是一款多进程多任务管理moudle,对于开发过node.js的同学们最大的郁闷莫过于重复的 ctrl+c 和 按 上+回车,每次代码有一点变动就必须干掉进程,然后再重启看运行情况。对于这个问题已经有aheckmann 提供的reload.js模块了,当有文件内容发生变化时,自动重新启动node.js进程。

虽然看似已经圆满解决了,但是当我们在写代码时总归有可能出现语法错误,比如忘记加 大括号,或者使用了中文的圆括号,又或者代码写到一半,想先save一下等等。当出现上述问题时,reload.js就悲剧了。

如果用cluster模块自带的reload.js,再配合自动重新启动子进程的功能,就会反复的启动,反复的死掉,直到系统崩溃,或者主进程崩溃,除非你能在崩溃之前将代码改正确,让子进程顺利启动起来,否则还是只能将reload.js关掉,重复ctrl+c和上+回车。

ClusterPlus v0.2.0带来了全新的node.js编程体验,除了上一篇博客介绍的多进程多任务功能外,这次加入了增强型relaod.js功能。

简单介绍一下:v0.2.0带来的新变化

1、API增加一个reload选项,默认是true打开(不过目前只完美支持一个子进程的情况,在启动多个子进程时会默认为关闭),当然您也可以手动将其设置为false关闭,或者指定某一个目录,表示当这个目录下的文件发生变化时,重启子进程,ClusterPlus会自动遍历并监听该目录下的所有子目录,目前仅支持一个子进程save和reload功能。

2、当第1步重新启动的子进程由于语法错误或者其他原因意外挂掉时,不会自动反复重启,而是会挂起,等待用户再次保存文件,然后尝试重启,当失败再次挂起,成功则启动成功。

3、改写v0.1.0部分写的比较烂的代码,引入了AsyncProxy模块,增强异步的性能,修改了部分bug。

4、重新改写了reload.js文件,可以遍历多层监听目录

5、在reload工作时,增加僵尸进程杀死功能

大家期待v0.3.0吧!

上个simplejs小例子,各位可以试着运行下看看效果:ClusterPlus的API和下载地址请去github上吧

https://github.com/DoubleSpout/ClusterPlus

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
var http = require('http'),
port = 3000,
ClusterPlus = require('../lib/ClusterPlus'),
server = http.createServer(function (req, res) {
res.end('this is a fdsfds, devleper!');
}),
cp = ClusterPlus({logger:true});
if(cp.isWorker){
server.listen(port);//listen
console.log('server listen at port '+port);
}
if(cp.isMaster){
setInterval(function(){console.log(cp.workobj);
},3000)
}
//这是个简单的例子
//将创建cpu个子进程来监听3000端口。
//支持自动reload,比如您可以试试将3000端口改成3001。
//不用重新启动node.js进程就可以改为监听3001端口
//您可以试着此句:
//console.log('server listen at port '+port)
//改为:
//console.log('server listen at port 'port)
//然后点击ctrl+s保存,这样程序就会报错,无法访问3000端口
//您不必重启,只需将代码改回:
//console.log('server listen at port '+port)
//服务又重新启动了,又可以正常访问3000端口了
//然后您可以尝试修改:thank you! this is a simple example!
//改为:HO~it is modify!
//更多例子请参考expamle文件夹

郑重声明:此模块未经严格测试,出现bug请联系我吧!

另注:目前开2个以上的node.js进程频繁的保存文件可能会出现启动多余进程的bug,请tx们开发时尽量少开node.js进程。在线上环境建议将reload功能关闭。