2012-12-06 6 views
1

에 가입 I이하나의 소켓은 여러 네임 스페이스

//server code 
io.of("/TYPE_ONE").on("connection", function(socket){ 
    console.log("Client connected to TYPE_ONE with id:\t"+socket.id+"\t"+process.env.NODE_WORKER_ID); 
}); 

io.of("/TYPE_TWO").on("connection", function(socket){ 
    console.log("Client connected to TYPE_TWO with id:\t"+socket.id+"\t"+process.env.NODE_WORKER_ID); 
}); 

//client code 

//for type one 
socket = io.connect("http://mydomain.com/TYPE_ONE", socketOptions); 

//different files always, only one type sent to each client 

//for type two 
socket = io.connect("http://mydomain.com/TYPE_TWO", socketOptions); 
(4 개 프로세스를 내가 클러스터를 사용하고 있는데 산란) 처음 나는이 방식을 구분하기 때문에, 그래서 고객의 다른 종류를 구별하기 위해 여러 네임 스페이스를 사용하는 응용 프로그램

갑자기, 하나의 클라이언트와 나는 다음과 같은 출력을 얻을 연결하는 콘솔,보고 후 : 하나의 연결 만이 서버에 만들어지고 있다는 것을 나는 확신

Client connected to TYPE_ONE with id: 1234  3 
. 
. 
. 
Client connected to TYPE_TWO with it: 1234  3 
(same id and workerId as previous connection) 

을 t

이 문제를 일으킬 수있는 것이 궁금합니다. Ive는 코드를 살펴보고 방금 설명한 스텁에 대한 메서드를 단순화했기 때문에 문제를 찾을 수 없었습니다.

도움 주셔서 감사합니다.

답변

0

그것은 내 코드에서 어떤 시점에서, 밝혀, 나는 io.of("/TYPE_ONE").socket(socket.id).emit(message);을했고 그 socket 네임 스페이스 TYPE_TWO에 속한, 그래서 보인다 메시지를 보낼 때마다 그가 연결되어 있지 않은 네임 스페이스의 오케이 (ocket)를 클릭하면 네임 스페이스에 자동으로 연결됩니다. 이상한.

0

코드에 오류가 없습니다. 연결이 하나뿐이므로 소켓은 하나의 socket.id가있는 네임 스페이스에 연결됩니다. 나는 많은 연결을 만드는 방법을 모른다. 어쩌면 두 개의 연결 포트를 시도하거나 서버를 여러 번 연결하고 들어야한다.

귀하의 문제를 해결하기 위해 하나의 연결을 사용 하겠지만 귀하의 사이트를 견고히하는 방법에 대해 생각하십시오. 예를 들어, 룸을 사용하고 세션에 새 사용자 ID를 저장하여 사용자를 배치 할 룸 또는 네임 스페이스를 파악합니다.

당신이 고객을 차별화하려는 경우 하나의 네임 스페이스에 다른 방에 테마를 넣어 자신의 socket.id 수표를 가지고 할 수 socket.io rooms or namespacing?

"여러 네임 스페이스와 여러 객실은 같은 (웹 소켓) 연결을 공유 할 수 있습니다" 그들이 무엇인지 방 (또는 socket.id 이름 (.joind(socket.id)) 객실을 가입 할 수 있습니다. https://github.com/LearnBoost/socket.io/wiki/Rooms

+0

그러나'socket = io.connect ("http://mydomain.com/TYPE_ONE", socketOptions);을 사용하는 소켓은'TYPE_TWO' 네임 스페이스에 연결하면 안됩니다. 그것이 내가 피하려고하는 것입니다. 나는 또한 'TYPE_THREE'를 가지고 있으며, 그것은 단지'TYPE_ONE'과'TYPE_TWO'라는 네임 스페이스에 가입하지 않습니다. – scanales