私は最初のノードプロジェクトで少しOJTを行っています。単純なサーバーを立ち上げることはできますが、アプリは打撃を受けるので、クラスターを使用するのは良い考えのようです。さまざまな検索(SOを含む)で見つけたいくつかのコードスニペットをまとめましたが、サーバーが起動しません。ノードの経験が浅いので、私は愚かなことをしていると思いますが、私にはわかりません。
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 );
}
結果:
TypeError: Object #<Cluster> has no method 'repl'
呼び出しを削除するuse
と、ワーカーは正しく起動しますが、process.env.NODE_WORKER_ID
ですundefined
。調べprocess.env
てみると、それは間違いなく定義されていないことがわかります。使用したスニペットは古いバージョンのものである可能性がありますが、他の方法でワーカースレッドを識別する方法がわかりません。
私がスクランブルしたものを誰かがスクランブル解除できれば、本当にありがたいです。