Robię małe OJT na moim pierwszym projekcie węzła i, podczas gdy mogę stanąć na prostym serwerze, aplikacja zostanie pobity, więc używanie klastra wydaje się dobrym pomysłem. Wybrałem kilka fragmentów kodu, które znalazłem w różnych wyszukiwaniach (w tym SO), ale serwer się nie uruchomi. Jestem pewien, że moje niedoświadczenie z węzłem powoduje, że robię coś głupiego, ale nie widzę tego.Używanie klastra w aplikacji Expressjs
var express = require('express');
var cluster = require('cluster');
var path = require('path');
var cCPUs = require('os').cpus().length;
var port = 3000;
var root = path.dirname(__dirname);
if(cluster.isMaster) {
for(var i = 0; i < cCPUs; i++) {
cluster.fork();
}
cluster.on('death', function(worker) {
console.log('Worker ' + worker.pid + ' died.');
});
}
else {
// eyes.inspect(process.env);
console.log('Worker: %s', process.env.NODE_WORKER_ID);
var app = express();
var routes = require('./routes')(app);
app
.use(cluster.repl(root + 'cluster.repl'))
.use(cluster.stats({ connections: true, requests: true }))
.use(cluster.reload(root))
.listen(port);
}
WYNIK:
TypeError: Object #<Cluster> has no method 'repl'
Jeśli usunąć połączenia use
robotnicy zaczynają się poprawnie, ale process.env.NODE_WORKER_ID
jest undefined
. Sprawdzanie process.env
pokazuje mi, że zdecydowanie nie jest zdefiniowany. Może fragment, którego użyłem, był ze starej wersji, ale nie jestem pewien, jak zidentyfikować wątek roboczy w jakikolwiek inny sposób.
Jeśli ktokolwiek może rozpakować wszystko, co gram, to byłbym bardzo wdzięczny.
Metody 'repl',' stats' i 'reload', których używasz, nie istnieją na' cluster'. Zacznij od przykładu kanonicznego z ['cluster' docs] (http://nodejs.org/api/cluster.html) i przejdź z tego miejsca. – JohnnyHK
Hmmm. Czy moduł klastra został dodany do rdzenia kiedyś przed wersją 0.8.16 (wersja, której używam)? Może przez cały czas szukałem w niewłaściwych miejscach. Dzięki. –
Myślę, że 'klaster' istnieje od 0.6, ale został przerobiony nieco w 0.8. – JohnnyHK