2017-01-21 8 views
0

に聞きながらどのように動作する私はいくつかの困難のコードのこの部分を理解することがあります。Nodejsクラスタモジュール - ソケット

const cluster = require('cluster'); 
const http = require('http'); 
const numCPUs = require('os').cpus().length; 

if (cluster.isMaster) { 
    console.log(`Master ${process.pid} is running`); 

    // Fork workers. 
    for (let i = 0; i < numCPUs; i++) { 
    cluster.fork(); 
    } 

    cluster.on('exit', (worker, code, signal) => { 
    console.log(`worker ${worker.process.pid} died`); 
    }); 
} else { 
    // Workers can share any TCP connection 
    // In this case it is an HTTP server 
    http.createServer((req, res) => { 
    res.writeHead(200); 
    res.end('hello world\n'); 
    }).listen(8000); 

    console.log(`Worker ${process.pid} started`); 
} 

を私は親と労働者との間の関係を理解し​​ていません。親プロセスは子プロセスを生成して待機しますが、負荷がどのようにワーカー(子供)に分割されるか

子プロセスで複数のプロセスを同じポートにバインドするにはどうすればよいですか?

答えて

2

あなたがこれを読んでいるかわかりません。美しい説明があります。
https://nodejs.org/dist/latest-v6.x/docs/api/cluster.html#cluster_how_it_works
単に、クラスタモジュールは、このの世話をします。あなたはこれについて心配する必要はありません。マスターは、ポートにリッスンを拘束し、着信接続を受け入れている
: -

複数のプロセスが同じポート

方法1(Windowsの場合を除き、デフォルトのラウンドロビン方式)にバインドされていません作業をスレーブに配布し、通信はipcソケットを介して行われます。
ここでは、すべてのスレーブが作業負荷に等しい機会を得ます。

方法2(アンバランスアプローチ):
は、マスターは、リスニングソケットがスレーブ・プロセスに共有されている(は、それが接続を受け入れていない、覚えておいてください)ポートにバインドされています。
ここでを受け入れ、要求を処理するのはスレーブの役割です。
ここでは、プロセス全体に作業を分散させることは、基盤となるOSに任されています。これは、OSによる公平なスケジューリングです。仕事が小さい場合、ほとんどの場合、仕事をする同じ奴隷です。

関連する問題