Szukaj…


Składnia

  • const klaster = wymagany („klaster”)
  • uster.fork ()
  • uster.isMaster
  • uster.isWorker
  • klaster.schedulingPolicy
  • uster.setupMaster (ustawienia)
  • ustawienia klastrów
  • klaster.worker // w pracowniku
  • uster.workers // w systemie głównym

Uwagi

Zauważ, że cluster.fork() odradza proces potomny, który rozpoczyna wykonywanie bieżącego skryptu od samego początku, w przeciwieństwie do fork() systemowego fork() w C, które klonuje bieżący proces i kontynuuje instrukcje po wywołaniu systemowym zarówno w rodzicu, jak i proces potomny.

Dokumentacja Node.js zawiera bardziej kompletny przewodnik po klastrach tutaj

Witaj świecie

To jest twoja 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')();
}

To jest twój główny server.js :

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

W tym przykładzie hostujemy podstawowy serwer WWW, jednak rozdzielamy pracowników (procesy potomne) za pomocą wbudowanego modułu klastra . Liczba forker procesów zależy od liczby dostępnych rdzeni procesora. Dzięki temu aplikacja Node.js może korzystać z wielordzeniowych procesorów, ponieważ pojedyncze wystąpienie Node.js działa w jednym wątku. Aplikacja będzie teraz współużytkować port 8000 we wszystkich procesach. Obciążenia będą automatycznie rozdzielane między pracowników przy użyciu metody Round-Robin.

Przykład klastra

Pojedyncze wystąpienie Node.js działa w jednym wątku. Aby skorzystać z systemów wielordzeniowych, aplikację można uruchomić w klastrze procesów Node.js w celu obsługi obciążenia.

Moduł cluster umożliwia łatwe tworzenie procesów podrzędnych, które współużytkują porty serwera.

W poniższym przykładzie utwórz proces potomny procesu roboczego w procesie głównym, który obsługuje obciążenie wielu rdzeni.

Przykład

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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow