2017-01-21 4 views
0

에 듣는 동안 작동 원리 나는이 코드 조각을 이해하는 어려움이 있습니다Nodejs 클러스터 모듈 - 소켓

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

if (cluster.isMaster) { 
    console.log(`Master ${process.pid} is running`); 

    // 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 
    http.createServer((req, res) => { 
    res.writeHead(200); 
    res.end('hello world\n'); 
    }).listen(8000); 

    console.log(`Worker ${process.pid} started`); 
} 

내가 부모와 근로자 사이의 관계를 이해하지 못하고 있습니다. 부모는 자식 프로세스를 생성하고 대기하지만 작업자 (자식)간에 부하가 어떻게 분산되는지

자식 프로세스에서 여러 프로세스가 같은 포트에 바인딩하는 방법은 무엇입니까?

답변

2

당신이 이것을 읽었는지 확실하지 않습니다. 아름다운 설명이 있습니다.
https://nodejs.org/dist/latest-v6.x/docs/api/cluster.html#cluster_how_it_works
간단하게 클러스터 모듈이 처리됩니다. 당신은 이것에 대해 걱정할 필요가 없습니다. ,
마스터 포트에 바인딩 수신 대기하고 들어오는 연결 받아 들인다 : - (창 제외하고 기본 라운드 로빈 방식은)

여러 프로세스는 동일한 포트

방법 항목에 바인딩되지 않습니다 작업을 슬레이브에 분배하고 통신은 ipc 소켓을 통해 발생합니다.
여기서 모든 슬레이브는 작업 부하에 대해 동등한 기회를 얻습니다.

방법 2 (언밸런스 접근) :
마스터가와 청취 소켓이 슬레이브 프로세스 공유 (는이 연결를 허용하지 않습니다 기억) 포트에 바인딩됩니다.
자, 연결을 수락하고 요청을 처리하는 것은 슬레이브의 책임입니다.
여기에서 프로세스 전반에 걸쳐 작업을 배포하는 것은 기본 OS에 달려 있습니다. 이것은 OS에 의해 공정한 스케줄링입니다. 일이 작 으면, 대부분의 시간은 일을하는 동일한 노예입니다.