코드코코

210915 [4장] 4.5 cluster 본문

기록/node.js 교과서 따라하기

210915 [4장] 4.5 cluster

코드코코 2021. 9. 15. 23:48

1. cluster.js

//cluster 모듈 : 기본적으로 싱글 프로세스로 동작하는 노드가 CPU 코어를 모두 사용할 수 있게 해주는 모듈.
//cluster에는 요청을 받아 워커 프로세스에 분배하는  master process와
//실질적인 일을 하는  worker process 가 있다.


const cluster = require('cluster');
const http = require('http');
const numCPUs = require('os').cpus().length;

if (cluster.isMaster) {
    console.log(`마스터 프로세스 아이디:${process.pid}`); //process.pid : 프로세스 식별자
    //CPU 개수만큼 워커를 생산
    for (let i = 0; i < numCPUs; i += 1) {
        cluster.fork();//fork():프로세스를 생성하는 메서드
    }
    //워커가 종료되었을 때
    cluster.on('exit', (worker, code, signal) => {
        console.log(`${worker.process.pid}번 워커가 종료되었습니다.`);
        console.log('code', code, 'signal', signal);
        //프로세스 생성
        //예기치 못한 에러로 서버 종료되는 현상 방지
        cluster.fork();
    });
} else {
    //워커에서 포트에서 대기
    http.createServer((req, res) => {
        res.writeHead(200, { 'content-Type': 'text/html; charset=utf-8' });
        res.write('<h1>Hello Node!</h1>');
        res.end('<p>Hello Cluster!</p>');
        //워커가 존재하는지 확인하기 위해 1초마다 강제 종료
        setTimeout(() => {
            //코드는 인수로 넣어준 코드가 출력됨
            //신호는 존재하는 경우 프로세스를 동료한 신호의 이름이 출력됨.
            process.exit(1);
        }, 1000);
    }).listen(8086);

    console.log(`${process.pid}번 워커 실행`);
}