인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

Donggun Jang님의 프로필 이미지
Donggun Jang

작성한 질문수

[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지

cluster

새로고침 한번에 클러스터 2개 종료

작성

·

383

·

수정됨

0

안녕하세요?

setTimeout 대신 setImmediate를 적용해 요청이 발생하는 즉시 워커가 종료되게 해보았는데요, 이 경우엔 워커가 한번에 두개씩 종료됩니다.

DevTool - network 창에 보이는 요청은 새로고침 1회당 GET 1회씩인데 왜 이러는지 궁금합니다!

 

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

if (cluster.isMaster) {
  console.log(`마스터 프로세스 아이디 : ${process.pid}`);
  // CPU 갯수만큼 워커를 생산
  for (let i=0; i < numCPUs; i++ ){
    cluster.fork();
  }
  //워커가 종료되었을 때
  cluster.on('exit', (worker, code, signal) => {
    console.log(`${worker.process.pid}번 워커가 종료되었습니다.`);

    console.log('code', code, `signal`, signal);
  });
} else {
  // 워커들이 포트에서 대기
  http.createServer((req, res) => {
    res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8'});
    res.write('<h1>Hello Node!');
    res.end('<p>Hello Cluster!</p>');
    setImmediate(()=> {
      process.exit(1);
    });
  }).listen(8086);

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

답변 2

0

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

setImmediate 안에 console.log(req.url) 하시고 요청 보내보세요

Donggun Jang님의 프로필 이미지
Donggun Jang
질문자

 

 

로컬서버 접속 후 새로고침 3번만에 전부 종료되었습니다.

 

 

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

브라우저라서 favicon.ico 요청이 자동으로 한번더 보내지는 겁니다. 콘솔로그 다시 봐보세요

0

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

코드를 보여주세요

Donggun Jang님의 프로필 이미지
Donggun Jang
질문자

수정했습니다.

Donggun Jang님의 프로필 이미지
Donggun Jang

작성한 질문수

질문하기