2017-03-22 2 views
0

Ich lerne Clustering in NodeJS. Ich habe zwei Aufgaben, eine ist node-sass und eine andere ist uglifyjs, die ich von zwei verschiedenen Arbeitern mit Cluster in nodeJS ausführen möchte. Obwohl der Code arbeitet Datei und Erstellen der SASS -> CSS Datei und main.js bis main.min.js Datei.Führen Sie zwei Aufgaben in zwei verschiedenen Arbeitern mit Cluster in Nodejs

Aber ich bin nicht sicher, ob es von separaten Arbeitern behandelt wird oder nicht. Lassen Sie mich wissen, wo ich die Änderungen vornehmen machen -

  • SASS -> CSS von einem Arbeiter gehandhabt
  • UglifyJS Aufgabe durch den zweiten Arbeiter
  • Sobald beide Aufgaben komplette Master-Konsole eine erfolgreiche Nachricht

Nach ist mein 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

Sie sollten überprüfen, [Grunzen] (https://gruntjs.org). – meyer9

+0

@ meyer9 Ich kenne das webpack/grunt/schluck Weg ... es ist eine Art von POC Ich mache für Cluster – Nesh

Antwort

1

ich denke, das

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

In diesem uglifyJS läuft in einem Master-Prozess, obwohl ich Knoten die Aufgaben von Arbeiter und einmal haben wollen fertig sein .. Master wird Konsole Erfolg, dh. keine größere Arbeit für den Meister außer Forken und Trösten der Erfolgsmeldung. – Nesh

+0

ahh .., gerade aktualisiert –

1

Im Cluster -> ma ster-slave-szenarien der echte grundcode, wie in vielen teilen der ursprünglichen Node.js-struktur, ist manchmal etwas komplizierter als nur einen master und einen slave zu deklarieren. Hier ist einer der Fälle, in denen ich dringend ein paar Stunden empfehlen würde, NPM zu suchen und ein Modul zu finden, das für Ihr Schema funktioniert. Ich habe cluster-master getestet, aber in Ihrem Fall benötigen Sie möglicherweise mehr als ein NPM-Modul. Es ist gut zu bedenken, dass Cluster normalerweise Kerne bedeuten, in denen man sich verzweigt - über dem Code cluster.fork();.

Sie möchten das Cluster-Master-Worker-Paradigma korrekt implementieren, und Sie möchten eine Rückgabe von jedem Worker und wissen, dass der Prozess ausgeführt wird, wie Sie es sollten. Entweder müssen Sie tief in die Node.js cluster documentation and implementation eintauchen oder die verschiedenen verfügbaren NPM-Module erforschen, die normalerweise die harte Arbeit für Sie verdecken.

0

Für poc Teil habe ich versucht, Knoten-Cluster und PM2, PM2 sehr einfach aussieht Setup helfen. pm2 kann auch das Knotenprojekt im Hintergrund laufen lassen. PM2-Befehl in der Build-Skript hinzufügen oder diese versuchen und sehen, wie es

pm2 start app.js -i max 

Siehe arbeitet http://pm2.keymetrics.io/docs/usage/cluster-mode/

Verwandte Themen