2017-11-23 9 views
0

나는이 문제로 어려움을 겪고있는 유일한 사람이 아닌 것 같다.NodeJS가 특정 방으로 내 보낸다 [socket.io]

그러나 간단한 채팅 응용 프로그램을 작성하려고합니다. 사용자가 회의실에 참여하면 roomID가 socket.room.id에 저장됩니다. 그것은 단지 숫자입니다. 그들은/변경 객실에 가입하면

, 나는 다음과 같은 코드를 가지고 : 이제

// Notify the rooms 
if(previousRoomID) io.to(previousRoomID).emit("activity-notification","<b>"+socket.me.name+"</b> has left the room " + previousRoomID); 

io.to(socket.room.id).emit("activity-notification","<b>"+socket.me.name+"</b> has joined the room " + socket.room.id); 

을의 그 previousRoomID = 1socket.room.id = 30을 가정 해 봅시다.

메시지를 전송하지만 모두 사용자에게 전송되는 것으로 보입니다. 내가 roomID 1에서 오전, 그리고 사용자가 방을 떠나면, 나는 다음과 같은 메시지를 얻을 :

user has left the room 1 
user has joined the room 30 

은 내가 io.to(socket.room.id).emit()로 전송하고 위 때문에 코드에서 두 번째 메시지를 볼 수 야해 아직 내가 방 1에있을 때에도 나는이 메시지를 듣고있다.

이상하게도 방송 기능을 사용하고있는 것 같습니다. 이벤트를 실행 한 사용자를 제외한 모든 사용자에게 이벤트를 보냅니다.

내가 뭘 잘못하고 있니?

답변

0

좋아, 이렇게 알아 냈어. 문제는 내가

socket.join(roomID)

를 호출했다하지만 내가 먼저 방을 떠나지 않을이었다. 그래서 소켓이 여러 방에 합류 할 수 있다는 것이 밝혀 졌는데, 왜 내가 두 메시지를 보았는지 설명 할 수 있습니다.

if(previousRoomID) socket.leave(previousRoomID); 
socket.join(roomID) 
if(previousRoomID) io.to(previousRoomID).emit("activity-notification","<b>"+socket.me.name+"</b> has left the room"); 
io.to(socket.room.id).emit("activity-notification","<b>"+socket.me.name+"</b> has joined the room"); 

나는 이론의 메시지가 activity-notification를 얻을 나던 io.to.emit 라인을 호출하는 소켓 모두에게 있지만 어떤 이유로 진행해야하지만 방송 기능을 이해 해달라고.