运行 在 nodejs 中使用集群的两个不同工作人员中的两个任务
Run two tasks in two different workers using cluster in nodejs
我正在 NodeJS
学习聚类。我有两个任务,一个是 node-sass
,另一个是 uglifyjs
,我想 运行 由两个不同的工作人员使用 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`);
}
在集群 --> 主从场景中,真正的基本代码,就像在原始 Node.js 结构的许多部分中一样,有时比仅仅声明主从要复杂一些。在这种情况下,我强烈建议您花几个小时搜索 NPM 并找到适合您的模式的模块。我已经测试了 cluster-master 但在您的情况下,您实际上可能需要多个 NPM 模块。最好记住,集群通常意味着您要分叉的核心——上面的代码 cluster.fork();
.
您想正确实施集群主从模式,并且您希望每个工作人员都有一个 return,并且知道该过程是您认为应该的 运行。这要么意味着深入研究 Node.js cluster documentation and implementation,要么研究各种可用的 NPM 模块,这通常会使您的艰苦工作变得模糊不清。
我认为这会有所帮助
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();
}
对于 poc 部分,我尝试了节点集群和 pm2,pm2 看起来很容易设置。 pm2 还可以将节点项目 运行 保留在后台。
在你的构建脚本中添加 pm2 命令,或者试试看它是如何工作的
pm2 start app.js -i max
我正在 NodeJS
学习聚类。我有两个任务,一个是 node-sass
,另一个是 uglifyjs
,我想 运行 由两个不同的工作人员使用 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`);
}
在集群 --> 主从场景中,真正的基本代码,就像在原始 Node.js 结构的许多部分中一样,有时比仅仅声明主从要复杂一些。在这种情况下,我强烈建议您花几个小时搜索 NPM 并找到适合您的模式的模块。我已经测试了 cluster-master 但在您的情况下,您实际上可能需要多个 NPM 模块。最好记住,集群通常意味着您要分叉的核心——上面的代码 cluster.fork();
.
您想正确实施集群主从模式,并且您希望每个工作人员都有一个 return,并且知道该过程是您认为应该的 运行。这要么意味着深入研究 Node.js cluster documentation and implementation,要么研究各种可用的 NPM 模块,这通常会使您的艰苦工作变得模糊不清。
我认为这会有所帮助
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();
}
对于 poc 部分,我尝试了节点集群和 pm2,pm2 看起来很容易设置。 pm2 还可以将节点项目 运行 保留在后台。 在你的构建脚本中添加 pm2 命令,或者试试看它是如何工作的
pm2 start app.js -i max