2017-03-22 12 views
0

NodeJSでクラスタリングを学習しています。私はとnodeJSのクラスタを使って2人の別の従業員によって実行したい別のものがuglifyjsの2つのタスクを持っています。コードは作業ファイルで、SASS -> CSSファイルとmain.jsmain.min.jsファイルを作成していますが、nodejのクラスタを使用して2人の異なる作業者で2つのタスクを実行

しかし、別の従業員によって処理されるかどうかはわかりません。私は改正を作るために作ることができる場所を私に教えてください -

第二作業者1つのワーカー
  • UglifyJSタスク
  • 両方のタスク完了するマスター・コンソール成功メッセージ
  • 後で扱わ

    • SASS -> CSS私のコードは:

      const cluster = require('cluster'); 
      const http = require('http'); 
      const numCPUs = require('os').cpus().length; 
      var fs = require('fs'); 
      var UglifyJS = require("uglify-js"); 
      var sass = require('node-sass'); 
      
      if (cluster.isMaster) { 
          console.log(`Master ${process.pid} is running`); 
      
          // Fork workers. 
          for (let i = 0; i < 2; i++) { 
          cluster.fork(); 
          } 
      
          cluster.on('exit', (worker, code, signal) => { 
          console.log(`worker ${worker.process.pid} died`); 
          }); 
      } else { 
      
      
      var result = UglifyJS.minify("js/main.js"); 
      fs.writeFile(__dirname + '/js/main.min.js', result.code, function(err){ 
          if(err) 
           throw err; 
      }); 
      
      sass.render({ 
          file: './css/main.scss', 
          outFile: 'css', 
      }, function(err, result) { 
          if(err) 
           throw err; 
          fs.writeFile(__dirname + '/css/main.css', result.css, function(err){ 
           if(err) 
            throw err; 
          }); 
      }); 
      
          console.log(`Worker ${process.pid} started`); 
      } 
      
    +0

    はあなたがチェックアウトする必要があります参照してくださいどのように動作するかを見る[うなり声](https://gruntjs.org)。 – meyer9

    +0

    @ meyer9私はwebpack/grunt/gulpの方法を知っています...クラスタのためにやっているPOCの種類 – Nesh

    答えて

    1

    私は、ノードのクラスタとPM2を試してみました、PM2の設定に非常に簡単に見える、これはPOCの部分について

    const cluster = require('cluster'); 
    const http = require('http'); 
    const numCPUs = require('os').cpus().length; 
    var fs = require('fs'); 
    var UglifyJS = require("uglify-js"); 
    var sass = require('node-sass'); 
    
    if (cluster.isMaster) { 
        console.log(`Master ${process.pid} is running`); 
        cluster.fork() 
         .on('exit', (worker, code, signal) => { 
          console.log(`worker ${worker.process.pid} died`); 
         }); 
        cluster.fork() 
         .on('exit', (worker, code, signal) => { 
          console.log(`worker ${worker.process.pid} died`); 
         }); 
    
    } else if (cluster.worker.id === 1) { 
        console.log(`Worker ${process.pid} started`); 
        sass.render({ 
         file: './css/main.scss', 
         outFile: 'css', 
        }, function (err, result) { 
         if (err) 
          throw err; 
         fs.writeFile(__dirname + '/css/main.css', result.css, function (err) { 
          if (err) 
           throw err; 
         }); 
        }); 
        process.exit(); 
    } else { 
        var result = UglifyJS.minify("js/main.js"); 
        fs.writeFile(__dirname + '/js/main.min.js', result.code, function (err) { 
         if (err) 
          throw err; 
        }); 
        process.exit(); 
    } 
    
    +0

    このuglifyJSはマスタプロセスで実行されていますが、完了します..マスターは、成功、すなわちコンソールを行います。成功のメッセージを捨てたり慰めたりすること以外に、マスターのための大きな仕事はありません。 – Nesh

    +0

    ahh ..、更新しました –

    1

    クラスタ - > ma元のNode.js構造の多くの部分と同様に、実際の基本コードはマスターとスレーブを宣言するだけでは少し複雑です。ここでは、NPMを検索して自分のスキーマで動作するモジュールを見つけるのに2時間強のアドバイスをするケースの1つです。私はcluster-masterをテストしましたが、実際には複数のNPMモジュールが必要な場合があります。クラスタは通常、コードcluster.fork();の上にフォークするコアを意味することに注意してください。

    クラスタのマスターワーカーのパラダイムを正しく実装し、それぞれのワーカーからの戻りを望み、プロセスが実行する必要があると考えていることを知りたいとします。どちらかというと、Node.js cluster documentation and implementationに深く掘り下げて調べるか、通常は難しい作業を難読化するさまざまなNPMモジュールを調べることです。

    0

    に役立つと思います。 pm2は、ノードプロジェクトをバックグラウンドで実行することもできます。 ビルドスクリプトでPM2コマンドを追加するか、単にこれを試してみて、それが

    pm2 start app.js -i max 
    

    http://pm2.keymetrics.io/docs/usage/cluster-mode/

    関連する問題