2012-02-06 1 views
0

과 같이 웹 제공 뭔가에 대부분의 예 :socket.io 및 http 서버를 다른 프로세스에 배치하지만 동일한 호스트 및 포트를 사용하는 방법은 무엇입니까?

동일한 프로세스에서 될 수있는 HTTP 및 소켓 서버를 모두 가질 것을 요구
var app = require('express').createServer() 
    , io = require('socket.io').listen(app); 

app.listen(80); 

.

크기가 약간 인 웹 사이트를 만드는 경우 두 서버를 분리해도 동일한 도메인과 포트를 사용하게 할 수 있습니다. 그것에 대해 어떻게 생각 하나?

+0

말 그대로 별도의 서버에 설치한다는 의미입니까? 아니면 두 개의 '서비스'를 분리한다는 뜻입니까? 그것은 그 해답에 막대한 영향을 미친다. 프로세스를 분할하는 것이 node.js의 모든 정신에 유용하고 반대로 적용되지 않는다고 생각하십니까? 특정 차단/시간을 먹는 작업이있는 경우 단일 포트에서 수신 대기하는 두 가지 프로세스를 처리하는 대신 이들을 관리하고이를 가능하게하기 위해 포워딩하는 것이 좋습니다. – Kato

+0

@Kato, 나는 더 구체적인 것에 대해 생각하고 있었지만 그것에 반대하기로 결정했습니다. 얼마나 다른가? 이 질문과 관련하여 node.js의 정신에 대해 자세히 설명해 주시겠습니까? 노드의 단일 스레드 아키텍처에서는 파일 제공 중 하나와 데이터 제공 중 하나가 문제가되는 것이 중요합니다. –

+0

글쎄요, 모든 것에 단일 스레드를 사용한다는 노드의 이상적인 견해와 다중 쓰레드가 최신 듀얼/쿼드/googleplex 프로세서의 장점을 더 잘 활용할 수 있다는 모호함이 있습니다. 그러나 본질적으로, 접근법을 사로 잡히면서, 작업이 지나치게 길고 동시에 차단되지 않는 한 모든 스레드에 하나의 스레드를 사용하십시오. 솔직히 말해서, 나는 당신의 접근 방식을 평가하거나 노드 설계를 대신하여 말할 자격이 있다고 생각하지 않습니다. 나는 단순히 당신의 부분에 대한 큰 그림 평가를 자극하는 몇 가지 자극을 제안했다 :) – Kato

답변

0

먼저 질문을 명확하게 설명하도록하겠습니다. 당신이 원하는 것이 무엇

이 매우 어려울 것입니다

같은 도메인 (안-하위 도메인)를 통해 액세스 할 수 여전히 NodeHTTP 웹 서버와 별도의 시스템에서 실행 SocketIO 클라이언트하지만 모두 가지고있다 그리고 까다로운 여러 IP의는 내 스택에 대해 읽을 필요가로드 밸런싱 있다면 그에 따라

을 요청을 매핑하는 상자와 haproxy에 필요합니다 :

가 나는로드 균형있는 여러 서버 (5 가리키고)가 라운드 로빈 (round robin)을 통해, 그래서 나는 이것을 나의 DNS Re 코드

relay.domain.com: { 
    A : 10.0.0.1, 
    A : 10.0.0.2, 
    A : 10.0.0.3, 
    A : 10.0.0.4 
} 

내가 또한 master.domain.com (10.0.0.0)에있는 마스터 서버가, 내 socket.io 클라이언트로부터의 모든 연결에 올 relay.domain.com와의 연결은 4 개의 서버에로드 균형 조정.

4 개 각 서버를

포트 80에 연결 나열되지만, 모두가 마스터 서버에 socket.io 클라이언트 연결을 생성하고 마스터에 대한 모든 요청을 보내, 마스터가 다음 소켓 데이터를 처리하고 그 데이터가 알려지기 위해서 우리는 그 데이터를 다시 모든 릴레이 서버로 보내면 모든 릴레이 서버가 클라이언트 목록을 알려줍니다.

+0

그 점에 대해 고마워요. 질문에 대답하지는 않지만 유용 할 수 있습니다. –