수색…


통사론

  • const cluster = require ( "cluster")
  • cluster.fork ()
  • cluster.isMaster
  • cluster.isWorker
  • cluster.schedulingPolicy
  • cluster.setupMaster (설정)
  • cluster.settings
  • cluster.worker // 작업자에서
  • cluster.workers // 마스터에 있음

비고

cluster.fork() 는 현재 프로세스를 복제하는 Cfork() 시스템 호출과 달리 현재 스크립트 실행을 시작하는 하위 프로세스를 생성하고 부모 호출과 시스템 호출 모두에서 시스템 호출 이후 계속됩니다. 자식 프로세스.

Node.js 문서에는 여기 에 클러스터에 대한 완전한 가이드가 있습니다.

안녕하세요 세계

이것이 당신의 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')();
}

이것은 당신의 주요 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;
}

이 예제에서는 기본 웹 서버를 호스트하지만 기본 제공 클러스터 모듈을 사용하여 작업자 (하위 프로세스)를 시작합니다. forker 프로세스 수는 사용 가능한 CPU 코어 수에 따라 다릅니다. 이를 통해 Node.js의 단일 인스턴스가 단일 스레드에서 실행되기 때문에 Node.js 응용 프로그램에서 멀티 코어 CPU를 활용할 수 있습니다. 이제 응용 프로그램은 모든 프로세스에서 포트 8000을 공유합니다. 부하는 기본적으로 라운드 로빈 방법을 사용하여 작업자간에 자동으로 분배됩니다.

클러스터 예제

Node.js 의 단일 인스턴스는 단일 스레드에서 실행됩니다. 멀티 코어 시스템을 활용하기 위해로드를 처리하기 위해 Node.js 프로세스 클러스터에서 응용 프로그램을 시작할 수 있습니다.

cluster 모듈을 사용하면 모든 서버 포트를 공유하는 하위 프로세스를 쉽게 만들 수 있습니다.

다음 예제에서는 여러 코어의 부하를 처리하는 기본 프로세스에서 작업자 하위 프로세스를 만듭니다.

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
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow