2014-03-25 3 views
0

NodeJS를 실행하고 싶습니다. 소켓 서버 (내 결정은 성능/크로스 브라우저/등등 ...에서 읽을 수있는 EngineIO와 함께 갈 것입니다) 확장 할 수 있습니다 (코어 추가). 따라서 사용자 클러스터 모듈을 원합니다 (실험 단계에서 모든 사람이 신뢰할만한 것처럼 보입니다). 대신 nginx에서로드 밸런서를 사용하는 방법을 살펴 보았지만이 프로젝트에 대해서는 너무 복잡해 보입니다. (어디에서나 고급 옵션으로 언급됩니다.)Node.JS Engine.IO를 사용하여 확장 가능한 (Node.JS- 클러스터 사용) 소켓 서버와 동일한 작업자의 두 장치 (두 번째 화면이라고도 함) 페어링/동기화 ...

그래서 해결해야 할 큰 문제는 다음과 같습니다. 동일한 스레드에 두 개의 서로 다른 장치가 있어야하므로 대화 할 수 있습니다 (두 번째 화면 솔루션> 예 : https://www.google.com/intl/en/chrome/browser/promo/supersync/). 어쨌든 EngineIO는 공유 스토리지 (예 : 공유 RedisStore)를 지원하지 않는 것 같아요. 그리고 나 자신을 구현하기에 너무 진보 된 것 같아요.

그래서 저는 각 프로세스 작업자를 다른 포트에 배치하는 설치를 생각하고 있습니다. 그런 다음 특정 작업자 (nodejs 클러스터에 의해로드 밸런싱 됨)의 EngineIO 인스턴스에 장치 중 하나가 연결되면 두 번째 장치에 입력해야하는 고유 한 코드가 표시 될 수 있습니다. 마지막 코드는 두 번째 장치는 연결할 포트를 알고 있습니다. 나는 각각의 장치가 동일한 스레드 (또는 최소한 첫 번째 장치)에 머물러 있기 위해 sticky-session이 필요하다는 것을 알았습니다. EngineIO를 연결할 때 그 작업자의 포트를 모르기 때문에

내가 관리했습니다. 다른 포트에서 여러 작업자를 시작하는 것 ... 그러나 뭔가 잘못되었다고 생각합니다. 이런 종류의 구조를 구현하는 개발자에 대한 예제를 찾지 못했을 수도 있습니다. 잘못했을 수도 있지만,이 문제에 대한 의견을 구해야 할 것 같습니다. 내 질문은 : 물론,

var cluster = require('cluster'), 
http = require('http'); 

var numCPUs = require('os').cpus().length; // or just hardcode to 2, when not more than one cpu is available... 

if (cluster.isMaster) { 
    // Fork workers. 
    for (var i = 0; i < numCPUs; i++) { 
    cluster.fork(); 
    } 

    cluster.on('listening', function(worker, address) { 
    console.log("worker.id: " + worker.id); 
    }); 
} else { 
    console.log("cluster.worker.id: " + cluster.worker.id); 

    http.createServer(function(req, res) { 
    res.writeHead(200); 
    res.end("hello world " + cluster.worker.id + "\n"); 
    }).listen(8000 + parseInt(cluster.worker.id)); 
} 

그리고 : 좋은 생각이 다른 포트에 다른 작업자 프로세스를 가지고 두 번째 장치에 연결하는 포트를 알 수 있도록이 같은 것입니다 엔진 IO는 솔루션의 중요한 부분이며, 위의 코드에 통합되어 있지는 않지만 다음 단계입니다.

답변

0

SocketCluster (http://socketcluster.io/)를 시도해 볼 수 있습니다. 이것은 다중 CPU 코어에서 실행되도록 특별히 설계되었으며 작업자간에 데이터를 공유하기위한 공유 데이터 저장소를 가지고 있습니다. 그것은 Engine.io의 위에 지어졌습니다 - 나는 주요 contibutor입니다. GitHub 페이지에서 설명서가 있는지 확인하여 적합한 지 확인하십시오 : https://github.com/TopCloud/socketcluster