node.js上的npm群集错误0.6.5

时间:2011-12-12 06:22:34

标签: node.js cluster-computing

我使用以下代码来利用群集npm为我的节点应用程序。

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 @ localhost:〜/ server $ node 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)

我知道'cluster'已经在0.4.x节点版本上测试过但是错误看起来很奇怪 有什么想法吗?

3 个答案:

答案 0 :(得分:5)

@mengxy很好地指出了文档,但我遇到了同样的问题。我认为指出一些事情会很好:

  1. 在撰写本文时,LearnBoost群集git repo(http://github.com/LearnBoost/cluster/blob/master/examples/express.js)中给出的示例不适用于Node 0.6。 / p>

  2. 作为Node的最近采用者,我受许多例子的支配;我怀疑其他人也是如此。我还没有看到Node 0.6 + cluster + express的一个很好的例子(可能因为Node 0.6仍然是最新的)。

  3. 因此,从非工作示例和@mengxy指向的Node 0.6文档派生出来,这是一个为快速应用程序提供服务的集群示例:

    #!/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);
    }
    

答案 1 :(得分:3)

集群npm模块已集成到节点0.6中的节点核心,并且存在一些API更改。

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

找到API文档

答案 2 :(得分:1)

来自Node.js on multi-core machines

Node.JS v0.6.X包含开箱即用的“集群”模块,可以轻松设置可以在单个端口上侦听的多个节点工作程序。

NOT 与learnboost“cluster”模块相同。

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);
}