• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

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

23.02.23 18:20 작성 23.02.23 18:34 수정 조회수 249

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) 하시고 요청 보내보세요

 

 

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

 

 

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

0

코드를 보여주세요

수정했습니다.