Ответ 1
Модуль clpm clpm интегрирован в ядро node в node 0.6, и есть некоторые изменения API.
Вы можете найти документы API на http://nodejs.org/docs/v0.6.5/api/cluster.html#cluster
Я использую следующий код, чтобы использовать кластер npm для моего приложения node.
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);
Это работало нормально на node 0.4.4, но в итоге получилось следующее сообщение об ошибке node 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 node, но ошибка кажется странной. Любая идея?
Модуль clpm clpm интегрирован в ядро node в node 0.6, и есть некоторые изменения API.
Вы можете найти документы API на http://nodejs.org/docs/v0.6.5/api/cluster.html#cluster
@mengxy красиво указал на документацию, но я столкнулся с этой проблемой. Я подумал, что было бы неплохо указать на несколько вещей:
Пример, приведенный в кластере LearnBoost git repo (http://github.com/LearnBoost/cluster/blob/master/examples/express.js) не работает с Node 0,6 с момента это письмо.
Как недавний усыновитель Node, я во власти многих примеров; Я подозреваю, что другие тоже. Я еще не видел хорошего примера Node 0.6 + cluster + express (вероятно, потому, что Node 0.6 все еще довольно недавно).
Итак, полученный из примера нерабочего поведения и указателя Node 0.6 docs @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);
}
От Node.js на многоядерных машинах:
Node.JS v0.6.X включает в себя модуль "cluster" прямо из коробки, что упрощает настройку нескольких рабочих node, которые могут прослушивать один порт.
Это НЕ то же, что и модуль "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);
}