[javascript] Socket.io의 방(room) 기능은 어떻게 동작하나요?

Socket.io는 실시간 웹 애플리케이션을 개발하기 위한 JavaScript 라이브러리입니다. 이 라이브러리는 상호작용하는 클라이언트와 서버 간의 양방향 통신을 가능하게 해줍니다. Socket.io의 방(room) 기능은 특정한 그룹이나 채널에 접속한 클라이언트들끼리만 메시지를 주고받게 하는 기능입니다.

Socket.io의 방 기능을 사용하려면, 먼저 서버에서 방을 생성하고 클라이언트를 해당 방에 참여시켜야 합니다. 방을 생성하기 위해서는 io 객체를 사용해야 합니다. 다음은 방을 생성하고 클라이언트를 해당 방에 참여시키는 예시 코드입니다.

// 서버 측 코드
const io = require('socket.io')(server);

io.on('connection', (socket) => {
  // 방 생성
  socket.join('room1');

  // 클라이언트를 방에 참여시키기
  socket.on('joinRoom', (roomName) => {
    socket.join(roomName);
  });
});

클라이언트가 서버의 방에 참여시킬 때는 socket.join() 메서드를 사용합니다. 위 예시에서는 클라이언트가 joinRoom 이벤트를 트리거하면 해당 방에 참여하도록 되어 있습니다.

방에 참여한 클라이언트들끼리 메시지를 주고받으려면, 서버 측에서는 to() 메서드를 사용하여 특정 방에 있는 클라이언트들에게 메시지를 보낼 수 있습니다. 다음은 서버에서 방에 있는 클라이언트들에게 메시지를 보내는 예시 코드입니다.

// 서버 측 코드
io.to('room1').emit('message', 'Hello, room1!');

// 클라이언트 측 코드
socket.on('message', (msg) => {
  console.log(msg); // 'Hello, room1!'
});

서버에서 to() 메서드를 사용하여 특정 방에 있는 클라이언트들에게 message 이벤트와 함께 메시지를 보냅니다. 클라이언트는 message 이벤트를 수신하여 메시지를 처리할 수 있습니다.

Socket.io의 방 기능은 특정 그룹이나 채널에 속한 클라이언트들끼리만 상호작용할 수 있도록 제한하는 데 유용합니다. 게임 방, 채팅 그룹 등을 구현할 때 많이 사용됩니다.

참고: Socket.io 공식 문서