2017-03-22 40 views
0

我在NodeJS中學習集羣。我有兩個任務,一個是node-sass,另一個是uglifyjs,我想由兩個不同的工作人員在nodeJS中使用集羣運行。雖然代碼是工作文件並創建SASS -> CSS文件和main.jsmain.min.js文件。在nodejs中使用集羣在兩個不同的工作人員中運行兩個任務

但我不確定是否由單獨的工人處理。讓我知道我可以作出適當修改,使 -

  • SASS -> CSS由一個工人
  • UglifyJS任務一旦兩個任務完成主控制檯成功的消息

處理的第二個工人

  • 繼是我的代碼:

    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

    我認爲這將有助於

    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運行在一個主進程中,儘管我想讓節點由worker來處理任務,完成..大師將控制檯成功,即。除了分手和安慰成功信息之外,沒有主要的工作要做。 – Nesh

    +0

    啊,剛剛更新 –

    1

    在cluster - > ma真正的從屬場景中,真正的基本代碼(如原始Node.js結構的許多部分)有時比聲明主控和從屬要複雜一些。以下是我強烈建議搜索NPM並找到適用於您的模式的模塊幾個小時的情況之一。我已經測試過cluster-master,但在您的情況下,您可能實際上需要多個NPM模塊。請記住,羣集通常是指您要分叉的核心 - 高於代碼cluster.fork();

    您希望正確實施集羣主人工範例,並且希望每位工作人員返回並知道該進程正在按照您的想法運行。要麼深入研究Node.js cluster documentation and implementation,要麼研究可用的各種NPM模塊,這些模塊通常會爲您困難地工作。

    0

    對於POC一部分,我試過節點集羣和PM2,PM2看起來很容易安裝。 pm2也可以保持節點項目在後臺運行。 在生成腳本中添加PM2命令或者只是試試這個,看看它是如何工作的

    pm2 start app.js -i max 
    

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

    相關問題