2014-01-24 2 views
1

노드와 소켓 io를 사용하여 실시간 응용 프로그램을 구축하고 있습니다.방의 클라이언트 세트에만 소켓 이벤트를 내 보냅니다.

내 질문은 : 내 클라이언트 측에

내 서버 측에서

socket.emit('adduser', username); 

이 지금

socket.on('adduser', function(username) { 
io.sockets.in(socket.room).socket.emit('user-added', somedata); 
} 

그리고이 다시 한 사용자가 클라이언트 측에 오는 추가 수신자

socket.on('user-added', function(somedata) { 
// get shit done! 
} 

이제 3 개의 클라이언트가 연결되어 있고 모두 동일한 스크립트를 공유한다고 가정합니다. 소켓 io에 대한 나의 이해에 따르면, 내가 io.sockets.in(socket.room).socket.emit라고 말하면 이벤트는 특정 방의 모든 연결된 클라이언트에게 방출 될 것입니다.

말 예를 들어, 난 단지 클라이언트 1 클라이언트 (3)이 'user-added' 이벤트

듣고 싶은 어떻게 이것을 달성합니까?

답변

0

같은 방에있는 모든 사용자에게 내 보내지 않으려면 다음을 사용하여 ID를 기반으로 특정 클라이언트로 내 보내면됩니다. 대신, 보낸 사람을 포함한 모든 사용자에게 다음 코드를 방출하려면

socket.broadcast.to('room1').emit('new user'); 

: 당신이 보낸 사람에게 제외한 모든 사용자에게 방출하려면

io.sockets.socket(socketid).emit('user-added', {data: yourData}); 
+0

하지만 소켓 (socketid)은 특정 소켓에만 방출됩니다. 방에 3 명의 클라이언트가 있다면, 클라이언트 1과 클라이언트 3에게 내 보내려합니다. – Ajey

+0

글쎄 그것은 방출 된 소켓으로 방출하고 싶지 않은 것 같습니다. 클라이언트 2가 발광 소켓이고 클라이언트 1과 3이 있습니다. 다른 두 개의 소켓이 같은 방에 연결되어 있다면 'socket.broadcast.to (socket.room) .emit ('user-added ', {data : yourData});' –

0

, 다음과 같은 코드를 사용할 수 있습니다 할 것입니다 : 당신이 io.sockets.in()socket 전화를하지 않아도

io.sockets.in('room1').emit('new user'); 

참고.

관련 문제