Node.js
Module de cluster
Recherche…
Syntaxe
- const cluster = require ("cluster")
- cluster.fork ()
- cluster.isMaster
- cluster.isWorker
- cluster.schedulingPolicy
- cluster.setupMaster (paramètres)
- cluster.settings
- cluster.worker // in worker
- cluster.workers // dans master
Remarques
Notez que cluster.fork()
génère un processus enfant qui commence à exécuter le script depuis le début, contrairement à l'appel système fork()
dans C qui clone le processus en cours et continue à partir de l'instruction après l'appel système dans parent et processus enfant.
La documentation de Node.js contient un guide plus complet sur les clusters ici
Bonjour le monde
Ceci est votre cluster.js
:
const cluster = require('cluster');
const http = require('http');
const numCPUs = require('os').cpus().length;
if (cluster.isMaster) {
// Fork workers.
for (let i = 0; i < numCPUs; i++) {
cluster.fork();
}
cluster.on('exit', (worker, code, signal) => {
console.log(`worker ${worker.process.pid} died`);
});
} else {
// Workers can share any TCP connection
// In this case it is an HTTP server
require('./server.js')();
}
Ceci est votre server.js
principal:
const http = require('http');
function startServer() {
const server = http.createServer((req, res) => {
res.writeHead(200);
res.end('Hello Http');
});
server.listen(3000);
}
if(!module.parent) {
// Start server if file is run directly
startServer();
} else {
// Export server, if file is referenced via cluster
module.exports = startServer;
}
Dans cet exemple, nous hébergeons un serveur Web de base, mais nous intégrons les employés (processus enfants) à l'aide du module de cluster intégré. Le nombre de processus forker dépend du nombre de cœurs de processeur disponibles. Cela permet à une application Node.js de tirer parti des processeurs multicœurs, car une seule instance de Node.js s'exécute dans un seul thread. L'application va maintenant partager le port 8000 sur tous les processus. Les charges seront automatiquement réparties entre les travailleurs utilisant la méthode Round-Robin par défaut.
Exemple de cluster
Une seule instance de Node.js
s'exécute dans un seul thread. Pour tirer parti des systèmes multi-core, l'application peut être lancée dans un cluster de processus Node.js pour gérer la charge.
Le module de cluster
vous permet de créer facilement des processus enfants partageant tous des ports de serveur.
L'exemple suivant crée le processus enfant travailleur dans le processus principal qui gère la charge sur plusieurs cœurs.
Exemple
const cluster = require('cluster');
const http = require('http');
const numCPUs = require('os').cpus().length; //number of CPUS
if (cluster.isMaster) {
// Fork workers.
for (var i = 0; i < numCPUs; i++) {
cluster.fork(); //creating child process
}
//on exit of cluster
cluster.on('exit', (worker, code, signal) => {
if (signal) {
console.log(`worker was killed by signal: ${signal}`);
} else if (code !== 0) {
console.log(`worker exited with error code: ${code}`);
} else {
console.log('worker success!');
}
});
} else {
// Workers can share any TCP connection
// In this case it is an HTTP server
http.createServer((req, res) => {
res.writeHead(200);
res.end('hello world\n');
}).listen(3000);
}