2017-03-22 39 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/

    相关问题