updated_at: 2024-12-15 04:08

NameSpace 적용하기

NameSpace 란

서버와 클라이언트가 연결되면 실시간 데이터 공유가 가능한데, socket을 그냥 사용하면 데이터가 모든 socket으로 들어가게 된다.
하지만 특정 페이지에서 소켓이 보내주는 모든 실시간 메세지를 모두 받을 필요는 없다. 불필요하며 낭비이기 때문이다.
그래서 특정 노드끼리만 연결해주는 것이 namespace 이다.

예제

서브측 코드

서브측은 io.of 를 사용하여 네임스페이스에 등록한다.

// 네임스페이스 등록
const room = io.of('/room');
const chat = io.of('/chat');

// room 네임스페이스 전용 이벤트
room.on('connection', (socket) => {
  console.log('room 네임스페이스에 접속');
  
  socket.on('disconnect', () => {
     console.log('room 네임스페이스 접속 해제');
  });
  
  socket.emit('newroom', '방 만들어'); // 같은 room 네임스페이스 소켓으로만 이벤트가 날라간다.
});

// chat 네임스페이스 전용 이벤트
chat.on('connection', (socket) => {
  console.log('chat 네임스페이스에 접속');
  socket.on('disconnect', () => {
  });
  
  socket.emit('join', '참여') // 같은 chat 네임스페이스 소켓으로만 이벤트가 날라간다.
});

클라이언트 코드

const socket_room = io.connect('http://localhost:8005/room', { // room 네임스페이스
    path: '/socket.io'
  });

  //* newRoom 이벤트 시 room 네임스페이스 에서만 통신 하게 된다.
  socket_room.on('newRoom', function (data) {
    // ...
  });

..........
const socket_chat = io.connect('http://localhost:8005/chat', {path: '/socket.io'}); // chat 네임스페이스

  //* join 이벤트 시 chat 네임스페이스 에서만 통신 하게 된다.
  socket_chat.on('join', function (data) {
	// ...
  });

평점을 남겨주세요
평점 : 2.5
총 투표수 : 1

질문 및 답글