2014-12-02 69 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()或被殺,在這種情況下,主想更換掉工作進程以上纔會發生,但它不是一個緊密的循環。