2011-12-12 83 views
2

我使用以下代碼來利用集羣npm來管理我的節點應用程序。node.js上的npm集羣錯誤0.6.5

form = require("connect-form"); 
express = require("express"); 
app = express.createServer(form({ keepExtensions: true })); 
cluster = require("cluster"); 

// App configuration 
// .... 

// Run on cluster 
cluster(app) 
.use(cluster.logger('logs')) 
.use(cluster.stats()) 
.use(cluster.pidfiles('pids')) 
.use(cluster.cli()) 
.listen(port); 

這是節點0.4.4工作正常,但我結束了以下錯誤節點0.6.5

LUC @本地:〜/服務器$節點app.js

node.js:201 
    throw e; // process.nextTick error, or 'error' event on first tick 
     ^
TypeError: Property 'cluster' of object #<Object> is not a function 
at Object.<anonymous> (/home/luc/server/app.js:15:1) 
at Module._compile (module.js:432:26) 
at Object..js (module.js:450:10) 
at Module.load (module.js:351:31) 
at Function._load (module.js:310:12) 
at Array.0 (module.js:470:10) 
at EventEmitter._tickCallback (node.js:192:40) 

我知道'羣集'已經在0.4.x節點版本上測試過,但是這個錯誤似乎很奇怪。
有什麼想法?

回答

3

集羣npm模塊已被集成到節點0.6的節點核心中,並且有一些API更改。

您可以在http://nodejs.org/docs/v0.6.5/api/cluster.html#cluster

+0

完美!它像一個魅力。非常感謝。 – Luc

+0

只是另一件事。日誌和內容是否可以像之前在集羣中的使用一樣容易地處理(在我上面問題中發佈的代碼中)? – Luc

5

@mengxy很好地指着文件找到API文檔,但我遇到了同樣的問題。我認爲這將是很好的指出幾件事情:

  1. 在LearnBoost集羣混帳回購協議給出的例子(http://github.com/LearnBoost/cluster/blob/master/examples/express。 js)在撰寫本文時不適用於Node 0.6。

  2. 作爲Node的最新採用者,我受許多示例的擺佈;我懷疑其他人也是如此。我還沒有看到Node 0.6 + cluster + express的好例子(可能是因爲Node 0.6還是相當新的)。

因此,從非工作實例和節點0.6文檔@mengxy指出,衍生,這裏的服務快車應用程序的集羣的例子:

#!/usr/bin/env node 

var cluster = require('cluster'); 
var express = require('express'); 
var os = require('os'); 

var app = express.createServer(); 

app.get('/', function(req, res){ 
    res.send('Hello World from worker ' + process.env.NODE_WORKER_ID); 
}); 

if (cluster.isMaster) { 
    // Fork workers. Two per core sounds reasonable to me. 
    for (var i = 0; i < os.cpus().length * 2; i++) { 
    var worker = cluster.fork(); 
    } 
} else { 
    // Worker processes have a http server. 
    app.listen(3000); 
} 
+0

非常感謝。我想沒有太多的例子,因爲這是非常直觀:) – Drasill

+0

FYI os.cpus()。長度* 1對我來說更好 – Mustafa

1

Node.js on multi-core machines

節點。 JS v0.6.X直接包含「集羣」模塊,因此可以輕鬆設置多個節點工作站,以便在單個端口上偵聽。

這是不是與learnboost「集羣」模塊相同。

http://nodejs.org/docs/latest/api/cluster.html

if (cluster.isMaster) { 
    // Fork workers. 
    for (var i = 0; i < numCPUs; i++) { 
    cluster.fork(); 
    } 
} else { 
    http.Server(function(req, res) { ... }).listen(8000); 
} 
+1

這是一個可惜的,因爲我發現learnboost版本更容易使用,它包括更多的日誌記錄工具。 – Luc