想用node一个守护进程的demo。目前看到的代码不是web服务就是net服务,都是依靠系统提供的listen接口来实现程序的持久执行的。
不借助http、net模块,如何写出一个event loop呢?
我能给出的方案是:
function Worker()
{
this.MaxIterations = 1000000;
this.Enabled = true;
this.condition = true;
this.iteration = 0;
this.Loop = function()
{
if (this.condition
&& this.Enabled
&& this.iteration++ < this.MaxIterations)
{
console.log(this.iteration);
setTimeout(this.Loop.bind(this),0);
}
};
this.Stop = function()
{
this.Enabled = false;
};
}
var w = new Worker();
setTimeout(w.Loop.bind(w), 0);
setTimeout(w.Stop.bind(w), 3000);
大家有更好的吗?
回复 (8)
J
Node进程就是在eventloop下运行的啊
O
引用 JacksonTianNode进程就是在eventloop下运行的啊
怎样让程序永远循环下去,并能处理event
J
引用 JacksonTianNode进程就是在eventloop下运行的啊
@ohsc 能不能用 process.nextTick() 的?
O
引用 JacksonTianNode进程就是在eventloop下运行的啊
@jiyinyiyong 可以
J
引用 JacksonTianNode进程就是在eventloop下运行的啊
@ohsc 想来想去还是和楼主一样.. - -! 求助楼下..
J
这样行不行的..
delay = (t, f) -> setTimeout f, t
show = console.log
run = yes
worker = (n) ->
if n < 10000000 and run
show n
show process.memoryUsage()
process.nextTick -> worker (n + 1)
worker 1
delay 10000, -> run = no
奇怪我一直觉得 Node 用递归总是会栈溢出,,' 这段代码又没报错, 这是怎么回事?
O
引用 jiyinyiyong这样行不行的.. 奇怪我一直觉得 Node 用递归总是会栈溢出,,' 这段代码又没报错, 这是怎么回事?
应该是process.nextTick的调用栈不太一样吧。 谁来证实一下。
T
function start(){ console.log('Mother process is running.');
var ls = require('child_process').spawn('node', ['app.js']);
ls.stdout.on('data', function (data)
{
console.log(data.toString());
});
ls.stderr.on('data', function (data)
{
console.log(data.toString());
});
ls.on('exit', function (code)
{
console.log('child process exited with code ' + code);
delete(ls);
ls = null;
setTimeout(start,3000);
});
}
参与回复
登录后即可参与回复。登录