2014-12-02 53 views
0

我很新的集群中node.js中/ child_process模块任何人都可以让我知道我们如何创建一个主节点或者如何使节点成为主节点?如何创建node.js的主节点

多数教程提到如何验证,如果一个节点是主或工人(下面的代码),但不知道如何创建主。

编辑:

var cluster = require('cluster'); 
var http = require('http'); 
var numCPUs = require('os').cpus().length; 

if (cluster.isMaster) { 
    // Fork workers. 
    for (var i = 0; i < numCPUs; i++) { 
    cluster.fork(); 
    } 

    cluster.on('exit', function(worker, code, signal) { 
    console.log('worker ' + worker.process.pid + ' died'); 
    //cluster.fork(); ----------(2) 
    }); 
} else { 
    // Workers can share any TCP connection 
    // In this case its a HTTP server 
    //cluster.fork();-----------(1) 
    http.createServer(function(req, res) { 
    res.writeHead(200); 
    console.log("hello worldd"); 
    res.end("hello worldd\n"); 
    }).listen(8000); 
} 

编辑:我怎样才能创建一个连续运行适当的子进程。如果我在上面的代码中使用cluster.fork(1)创建新进程,则工作进程将立即生成并销毁。如果我在上面的代码中创建像(2)这样的工作者,它将进入死亡和创造的无限循环。如果上述示例不明确,请提供任何代码或链接,说明创建子进程的正确工作示例,并同时处理跨不同进程的多个请求。 非常感谢。

回答

1

其实你不创建高手。当您致电cluster.fork时,它会创建一个子进程。主人仍然存在。孩子和主人都使用相同的代码库,并根据cluster.isMaster进行区分。

编辑:

如果你想创建端口8000服务/网络服务器。你应该像(2)中所示的那样去做。除了你的情况,它会进入一个无限循环,因为你正在'退出'事件而没有真正检查它为什么'退出'。

if(cluster.isMaster) { 
    for(var i = 0; i< numCpus; i++) 
    cluster.fork(); 

    cluster.on('exit', function(worker) { 
    if(worker.suicide) //do nothing 
    else cluster.fork(); 
    }); 
} else { 
    // create server && listen on 8000 
    // no need to involve cluster here. 
    http.createServer(function(req, res) {}).listen(8000); 
} 

编辑:您可以通过检查worker.suicide

例如避免样品要点:https://gist.github.com/limianwang/55e8a0b6ca816e024358

在取读:

http://nodejs.org/api/cluster.html#cluster_worker_suicide

+0

感谢您的输入。我明白了你的观点,这引出了另一个问题,我在问题中更新了这个问题。请看看它并提供你的见解。 – user3366706 2014-12-02 09:11:20

+0

@ user3366706更新=) – lwang135 2014-12-02 09:16:49

+0

你的意思是说,(1)是在正确的地方创建新的子进程和(2)如预期,如果自杀式/杀检查后,右键是否行得通呢? – user3366706 2014-12-02 09:23:45

1

cluster.fork()创建一个不退出的子进程。调用res.end()不会退出子进程,它会等待并侦听更多的连接。

案例(2)如果孩子叫process.exit()或被杀,在这种情况下,主想更换掉工作进程以上才会发生,但它不是一个紧密的循环。