1

我正在学习聚类NodeJS。我有两个任务,一个是node-sass,另一个是uglifyjs我想由两个不同的工作人员使用 cluster in 运行nodeJS。虽然代码是工作文件并创建SASS -> CSS文件和main.js文件main.min.js

但我不确定它是否由单独的工人处理。让我知道我可以在哪里进行修改 -

  • 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`);
}
4

3 回答 3

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();
}
于 2017-03-22T07:43:37.193 回答
1

在集群 --> 主从场景中,真正的基本代码,就像在原始 Node.js 结构的许多部分中一样,有时比仅仅声明主从要复杂一些。这是我强烈建议花几个小时搜索 NPM 并找到适用于您的架构的模块的情况之一。我已经测试了cluster-master,但在您的情况下,您实际上可能需要多个 NPM 模块。最好记住,集群通常意味着您将要分叉的核心——在代码之上cluster.fork();

您希望正确实现集群主从模式,并且希望从每个工作人员那里获得回报,并且知道进程正在按照您认为的方式运行。这要么意味着深入研究Node.js 集群文档和实现,要么研究各种可用的 NPM 模块,这通常会使您的辛勤工作变得模糊不清。

于 2017-03-22T06:28:18.280 回答
0

对于 poc 部分,我尝试了节点集群和 pm2,pm2 看起来很容易设置。pm2 还可以保持节点项目在后台运行。在你的构建脚本中添加 pm2 命令,或者试试这个看看它是如何工作的

pm2 start app.js -i max

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

于 2017-09-22T06:11:49.393 回答