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);
}


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow