2016-11-30 1 views
0

cluster 모듈을 사용하여 하위 프로세스/작업자를 만듭니다.하위 작업자가 통화중인 경우 마스터 클러스터에서 요청을 수락합니까?

if (cluster.isMaster) { 
    cluster.fork(); 
} else { 
    http.createServer((req, res) => { 
     if (cluster.isMaster) { 
      res.writeHead(200); 
      res.end('hello from master\n'); 
     } else { 
      while (true) { 
       console.log('from child'); 
      } 
     } 
    }).listen(8484); 
} 

내가 자식 프로세스가 사용중인 경우 주요 프로세스가 요청을 처리 여부를 알고 싶어 : 여기에 내가 가진 간단한 설치입니다. 그래서 위의 코드를 실행하고 브라우저에서 두 개의 요청을 만들었습니다. 첫 번째 요청은 하위 프로세스를 바쁘게 만들고 두 번째 프로세스는 마스터 클러스터에서 처리 할 것으로 예상했습니다. 하지만 나는 클라이언트에게 hello from master을 보내지 못했습니다.

자식 프로세스가 사용중인 경우 마스터 프로세스/작업자/클러스터가 요청을 처리합니까? 그렇다면 왜 내 실험이 효과가 없었습니까?

+1

if/else 문과 관련이 있습니까? 그것이 else에 도달하면,'cluster.isMaster'는 참이 아니므로 결코 패스하지 않습니다. – chazsolo

답변

1

저는 주인공이 아이들을 관리하는 것이 합리적이라고 확신합니다. 서버 코드가 작성된 것처럼 서면으로 설정되기 때문에 실험이 작동하지 않았습니다. 따라서 모든 요청은 하위 프로세스에 대해 수행됩니다.

+0

감사합니다. 스크립트를 다시 작성하여 마스터 및 하위 클러스터에서'createServer'가 실행되도록 시도했는데'Error : bind EADDRINUSE null : 8484' 오류가 발생합니다. 그래서 같은 포트를 여러 개의 '수신 대기'할 수 없다는 것을 이해합니다. 그러나 4 개의 하위 프로세스를 사용하고 모두 동일한 코드를 실행하면 어떻게 작동합니까? –

+0

내가 말했듯이, 클러스터 마스터는 단지 아이들을 관리하기로되어 있기 때문입니다. 자식이 표시하는 선언 된 포트를 프록시하고 노출하여 하나의 인터페이스로 표시합니다. – Paul

+0

좋아요, 고마워요. 그렇다면 자식 클러스터 코드를 더 잘 구분할 수 있고, 이렇게하면됩니다. if (cluster.isMaster) { cluster.fork(); } else { require ('./ child'); }'. 말이된다? –

관련 문제