2017-03-22 1 views
0

J'apprends le clustering dans NodeJS. J'ai deux tâches l'une est node-sass et une autre est uglifyjs que je veux exécuter par deux travailleurs différents en utilisant cluster dans nodeJS. Bien que le code fonctionne fichier et la création du fichier SASS -> CSS et main.js au fichier main.min.js.Exécuter deux tâches dans deux travailleurs différents en utilisant cluster dans nodejs

Mais je ne suis pas sûr si elle est traitée par des travailleurs distincts ou non. Faites-moi savoir où je peux apporter les modifications à faire -

  • SASS -> CSS géré par un travailleur
  • UglifyJS tâche par le second travailleur
  • Une fois les tâches console complète Master un message réussi

Suite est mon code:

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

vous devriez vérifier [grognement] (https://gruntjs.org). – meyer9

+0

@ meyer9 Je connais le webpack/grunt/gulp way ... c'est une sorte de POC que je fais pour les clusters – Nesh

Répondre

1

Je pense que cela vous aidera

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

Dans cette uglifyJS est en cours d'exécution dans un processus maître, mais je veux avoir un noeud les tâches traitées par le travailleur et une fois son se terminer ..master console le succès, c'est à dire. pas de travail majeur pour le maître autre que de forking et de consoler le message de succès. – Nesh

+0

ahh .., juste mis à jour –

1

Dans le cluster -> ma Scénarios ster-slave Le vrai code de base, comme dans beaucoup de parties de la structure originale de Node.js, est parfois un peu plus compliqué que de simplement déclarer un maître et un esclave. Voici l'un des cas où je conseillerais fortement quelques heures de recherche NPM et de trouver un module qui fonctionnera pour votre schéma. J'ai testé cluster-master mais dans votre cas, vous pouvez avoir besoin de plus d'un module NPM. Il serait bon de garder à l'esprit que les clusters signifient généralement les cœurs où vous allez fourcher - ci-dessus le code cluster.fork();.

Vous souhaitez implémenter le paradigme maître-ouvrier de cluster correctement et vous voulez un retour de chaque travailleur et savoir que le processus s'exécute comme vous le pensez. Soit cela signifie plonger profondément dans le Node.js cluster documentation and implementation, soit faire des recherches sur les différents modules NPM disponibles qui obscurciront habituellement le dur travail pour vous.

0

Pour une partie poc j'ai essayé nœud de cluster et PM2, PM2 est très facile à installer. pm2 peut également garder le projet de noeud en cours en arrière-plan. Ajouter commande PM2 dans votre script de construction ou tout simplement essayer et voir comment cela fonctionne

pm2 start app.js -i max 

Référez http://pm2.keymetrics.io/docs/usage/cluster-mode/