완성도 높이기... socket.io

현재 문제점

해결 : socket.io에 대한 이해

유저가 socket에 연결되면 아래와 같은 동작이 실행됨

  1. 자동으로 io.on("connection") 이벤트에 걸리게 되고, "socket"이 만들어짐

    <aside> 💡 몇 가지 유용한 메소드들

    </aside>

    <aside> 💡 특정 socket이 소속된 모든 room 보기 socket.adapter.rooms ⇒ Map 형태

    </aside>

    <aside> 💡 특정 room에 연결된 모든 socket 보기 io.sockets.adapter.rooms.get(roomId) ⇒ Set 형태

    </aside>

  2. "socket"을 전달받은 콜백이 실행됨

  3. 자기 id로 된 socket room은 자동으로 생성되고, 의도적으로 특정 roomId를 줘서 roomId를 key로 하는 socket room을 생성시킬 수 있다.

io.on("connection", (socket) => {
  // socket과 관련된 이벤트들
});

생성된 socket들을 같은 방에 묶기

io.on("connection", (socket) => {
  socket.on("join-room", (roomId, playerData) => {
    socket.join(roomId);
	});
});

disconnect와 leave

socket.on("disconnect", () => {
  socket.broadcast.to(roomId).emit("player-disconnected", playerData);
});

<aside> 💡 leave 이벤트는 별도로 설정한 이벤트이기 때문에 socket.leave()를 통해서 socket에서도 제거해줘야한다. 그렇지 않으면 클라이언트 화면에서는 방을 나갔지만, socket은 계속 남아있게 된다.

</aside>