2012-11-21 3 views
0

socket.io + cluster를 사용하여 잡담력 응용 프로그램을 확장하려고합니다. 자식 프로세스가 들어오는 요청을 프로세스 ID (fork 할 때 할당 됨)에 속하게 처리 할 수 ​​있습니까? 예
:
Node.js - 하위 프로세스가 자체에 관련된 URL을 처리합니다.

http://mydomain/calculate?process=1 

상기 요청만을 처리 (1)에 의해 처리되는 다른 프로세스를 무시한다. 이 방법으로 같은 방의 요청이 동일한 프로세스에서 처리되도록하고 싶습니다. 따라서 RediStore를 socket.io 백엔드로 사용할 필요가 없습니다.

또한 RedisStore를 사용할 때 io.sockets.manager.rooms 데이터가 모든 프로세스에서 정확하지 않기 때문에 RedisStore가 어떻게 작동하는지 궁금합니다.

편집 :
이 다른 방법을 넣어 : 쿼리 문자열에 따라 다른 자식 프로세스 마스터 프로세스 파견 요청을 클러스터 할 수 있습니까?

+0

"fork"는 무엇을 의미합니까? 이것은 당신이 이야기하고있는 프로세스 포크 또는 클러스터 모듈에서 사용되는 용어입니까? 자식 프로세스가 노드 응용 프로그램 용 패킷을 자동으로 가로채는 것을 의미합니까? – tjameson

+0

@tjameson 클러스터 포크, cluster.fork (worker_env). – superche

답변

2

대답은 아니요입니다. OS는이 상황에서로드 밸런싱을 처리하고 쿼리 문자열을 처리하기 위해 이미 웹 서버 (귀하의 경우 하위 프로세스)에 연결해야합니다.

제 경험으로 보면 클러스터는 쓸모가 없습니다. 여러 개의 NodeJS 프로세스를 여러 포트에 생성하고 프록시 앞에 (nginx?) 넣는 것이 훨씬 쉽습니다. 쉽고 확장 가능합니다.

socket.io의 경우 : 문제가되는 글로벌 변수를 공유하기 때문에 클러스터에서 올바르게 작동하지 않는다고 생각합니다. 다시 : 별도의 NodeJS 프로세스를 생성하면 문제가 해결됩니다. 또한 여러 컴퓨터로 확장해야하는 시점에 도달하면 유용 할 것입니다. 클러스터 된 트릭은 그 시점에서 도움이되지 않습니다.

마지막주의 사항 : socket.io는 확장 성이 좋지 않습니다. 자신의 WebSocket 서버 (예 : based on WS)를 작성하고 자신 만의 확장 메커니즘을 구현하는 것이 좋습니다. 예를 들어 all-to-all UDP ping을 기반으로합니다. 소량의 서버 (50 ~ 100?)를 처리 할 때 확장이 잘되어야합니다.

관련 문제