본문 바로가기
Etc/Scrap

[NodeJS]Socket.io rooms

by 생각하는달팽이 2015. 8. 26.

Socket.io rooms 사용법

07 Oct 2013

Rooms는 접속된 클라이언트들을 룸으로 나눠서 관리할 수 있는 수단을 제공합니다. 그래서 어떤 룸에 있는 클라이언트 모두에 이벤트를 보내는(emit) 것을 쉽게 할 수 있게 해 줍니다.

Join과 Leave

특정 소켓을 어떤 룸에 join 하려면 아래와 같은 방법으로 join() 함수를 사용합니다.

socket.join('room')

leave할 때는 아래와 같이 leave() 함수를 사용합니다.

socket.leave('room')

아래가 활용예입니다.

socket.on('subscribe', function(data) { socket.join(data.room); })
socket.on('unsubscribe', function(data) { socket.leave(data.room); })

이벤트 보내기(emitting)

룸에 있는 모든 클라이언트에게 이벤트를 보내는 방법은 두가지가 있습니다.

socket.broadcast.to('room') or io.sockets.in('room')

소켓에 브로드케스트(Socket Broadcast)

룸 내에 있는 모든 클라이언트(자신 이외)에 브로드케스트합니다.

활용예

io.sockets.on('connection', function (socket) {
    // 이 socket 이외의 room 내의 모두에게 송신
    socket.broadcast.to('room').emit('event_name', data)
})

룸을 지정하지 않으면 접속된 모든 클라이언트(자신 이외)에 전송합니다.

io.sockets.on('connection', function (socket) {
    // 이 socket 이외의 모두에게 송신
    socket.broadcast.emit('event_name', data)
})
io.sockets 이용

특정 룸 내의 모든 클라이언트에 송신

io.sockets.in('room').emit('event_name', data)

모든 클라이언트에 송신

io.sockets.emit('event_name', data)

특정 네임 영역(name space)내의 어떤 room 내에 있는 모든 클라이언트에게 송신

io.of('namespace').in('room').emit('event_name', data)

room 정보 구하기

모든 room 리스트
io.sockets.manager.rooms

room의 이름이 키인 해쉬입니다. 값은 그 room의 소켓 아이디들의 배열입니다. room 명 앞에'/'가 붙어 있다는 점에 주의합니다. 내부적으로 쓰이는 것이라서 join(), leaver()할 때는 '/'를 붙일 필요는 없습니다.

room 내의 모든 클라이언트
io.sockets.clients('room')

room 내의 모든 클라이언트들(socket 인스턴스)의 리스트를 리턴합니다.io.of('namespace').clients('room') 이런식으로 네임 영역을 지정할 수도 있습니다.

특정 클라이언트가 join해 있는 모든 룸
io.sockets.manager.roomClients[socket.id]

socket이 join해 있는 모든 room들의 이름이 구해집니다. room 명에 '/'가 붙어 있음에 주의합니다. 또한 모든 클라이언트는 기본으로 무명의 room ""에 들어 있어 있습니다.


출처 : http://www.ryeonho.com/posts/socket.io_rooms.html




반응형

'Etc > Scrap' 카테고리의 다른 글

[node.js] forever  (0) 2015.08.27
[node.js] Node.JS 와 apache 동시에 돌리기  (0) 2015.08.27
The Boat , Interaction Site  (0) 2015.08.19
MySQL Maintenance Tasks for InnoDB with MySQL 5.1  (0) 2015.08.13
[PHP] All PHP Framework Suck !!!  (0) 2015.08.06