Ricerca…


Sintassi

  • const cluster = require ("cluster")
  • cluster.fork ()
  • cluster.isMaster
  • cluster.isWorker
  • cluster.schedulingPolicy
  • cluster.setupMaster (impostazioni)
  • cluster.settings
  • cluster.worker // in worker
  • cluster.workers // in master

Osservazioni

Si noti che cluster.fork() genera un processo figlio che inizia a eseguire lo script corrente dall'inizio, in contrasto con la chiamata di sistema fork() in C che clona il processo corrente e continua dall'istruzione dopo la chiamata di sistema in entrambi i genitori e processo figlio.

La documentazione di Node.js ha una guida più completa ai cluster qui

Ciao mondo

Questo è il tuo 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')();
}

Questo è il tuo server.js principale:

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

In questo esempio, ospitiamo un server Web di base, tuttavia, giriamo i worker (processi secondari) utilizzando il modulo cluster incorporato. Il numero di processi forker dipende dal numero di core CPU disponibili. Ciò consente a un'applicazione Node.js di sfruttare le CPU multi-core, poiché una singola istanza di Node.js viene eseguita in un singolo thread. L'applicazione condividerà ora la porta 8000 su tutti i processi. I carichi verranno automaticamente distribuiti tra i lavoratori utilizzando il metodo Round-Robin per impostazione predefinita.

Esempio di cluster

Una singola istanza di Node.js viene eseguita in un singolo thread. Per sfruttare i sistemi multi-core, l'applicazione può essere avviata in un cluster di processi Node.js per gestire il carico.

Il modulo cluster consente di creare facilmente processi figlio che condividono tutte le porte del server.

L'esempio seguente crea il processo child worker nel processo principale che gestisce il carico su più core.

Esempio

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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow