2016-12-25 1 views
3

나는 node.js와 socket.io를 처음 사용합니다. 나는 방과 함께 일하는 방법을 이해하지 못했다. 나는 사적인 메시지와 같은 것을 창조하고있다. 각 사용자 쌍마다 고유 한 공간이 있습니다. 문서에서Socket.io의 다이나믹 룸

:

io.on('connection', function(socket){ 
    socket.join('some room'); 
}); 

는하지만 클라이언트 측에서 방을 만들 필요가있다. 그것은 역동적이기 때문입니다. 방법?

나는 몇 가지 예 https://gist.github.com/crtr0/2896891

server.js

io = socketio.listen(server); 

io.sockets.on('connection', function(socket) { 
    socket.on('room', function(room) { 
     socket.join(room); 
    }); 
}); 

room = "abc123"; 
io.sockets.in(room).emit('message', 'what is going on, party people?'); 

이 줄은 미쳐 날 드라이브를 만났다. 나 바보 같아. 왜냐하면 서버는 사용할 공간을 결코 알지 못하기 때문입니다. 서버는 여러 개의 방을 처리 할 수 ​​있습니다.

room = "abc123"; 

제발, 도와 주시거나 설명하십시오.

답변

4

위의 코드에서 방을 abc123으로 고정 시켰으며 연결된 모든 클라이언트에 대해 동적으로 만들어야합니다. 당신은 또한 당신이 클라이언트에서 변경/이름 바꾸기/떠나기/가입 방을 제공 할 수있는 사용자에게 방 만들기 옵션을 제공 할 수 있습니다. 기본적으로 클라이언트와 서버에서 논리적 인 변경 사항을 적용 할 수 있습니다.

클라이언트 로직 업데이트하거나 변경 방 : 예 아래를 참조하십시오

socket.on('switchRoom', function(newroom){ 
     // leave the current room (stored in session) 
     socket.leave(socket.room); 
     // join new room, received as function parameter 
     socket.join(newroom); 
     socket.emit('updatechat', 'SERVER', 'you have connected to '+ newroom); 
     // sent message to OLD room 
     socket.broadcast.to(socket.room).emit('updatechat', 'SERVER', socket.username+' has left this room'); 
     // update socket session room title 
     socket.room = newroom; 
     socket.broadcast.to(newroom).emit('updatechat', 'SERVER', socket.username+' has joined this room'); 
     socket.emit('updaterooms', rooms, newroom); 
    }); 

:

Socket.io Multi-room Example

Rooms and Namespace in socket.io

객실 변경 처리 할 수 ​​

socket.emit('switchRoom', newRoom); 

socket.on('updaterooms', function(rooms, current_room) { 
    // Update new room logic 

} 

서버 로직

+0

죄송합니다.이 예제를 이해하지 못했습니다. 이 스타일 "swtichRoom", "updatechat", "SERVER"는 성가신 일입니다. 하나의 스타일로 작성 - lowerCamelCase. –

+0

위 코드는 샘플 코드이며, @DarynK에 대한 자세한 내용은 링크를 참조하십시오. – Sumeet

0

좋아요, 제 문제를 해결했습니다! 네임 스페이스 내에 방을 사용하는 경우 쓰기를 잊지 마세요. .of('your_namespace')

+0

안녕하세요. 같은 문제가 있습니다. 문제를 해결하는 방법을 더 설명 할 수 있습니까? – radtelbi