HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
📯
부스트캠프 7기 BE 멤버쉽 설계
/
다른 플레이어의 위치정보를 소켓으로 주고 받는 것에 대해

다른 플레이어의 위치정보를 소켓으로 주고 받는 것에 대해

요약
확인
확인
레이블
7주차
  • 다른 플레이어와의 위치 정보를 소켓을 통해서 공유하여 그 위치를 렌더링 해봤습니다.
    • Client A > 서버 > Client B
       
  • 그런데 이렇게되면 키보드 누를때마다 나의 위치 정보가 계속해서 다른 클라이언트의 소켓을 통해서 들어가게 되는데 이 때문에 네트워크탭을 보면 엄청나게 많은 패킷이 쌓이더라구요
 
  • 그런데 zepp의 경우에는 네트워크 탭을 보더라도 아무것도 쌓이지 않았고 한편 플레이어 위치정보 공유는 잘 되던데 무슨차이가 있는 것일까요?
 

그냥 지나가던 캠퍼의 답변

notion image
zep 역시 각 클라이언트가 1칸씩 이동될 때마다 서버를 거쳐서 다른 클라이언트로 일일이 쏴 주는 형식을 취하고 있습니다. 그래서 zep도 네트워크탭을 보면 엄청나게 많은 패킷이 쌓입니다.
zep에 들어간 뒤 게임에 접속하기 전 개발자 도구의 네트워크탭을 보면 game 웹소켓이 존재하는데 이걸 보면 패킷이 엄청나게 많이 찍히는 걸 볼 수 있을 겁니다. 쉽게 말해 그냥 개발자 도구를 늦게 열어서 아무것도 안 쌓인 것처럼 보이는 것 뿐입니다.
 
⇒ 오 찾아보니까 WS 탭을 눌러보니 나오네요 감사합니다
 
플레이어간 이동을 동기화하는 기법에는 여러가지가 있는데, 클라이언트가 이벤트를 발생시키면 서버에서 처리한 뒤 모든 클라이언트에게 뿌려주는 방식과(LOL에서 쓰이는 방식), 클라이언트가 이벤트를 발생시키면 클라이언트에서 먼저 이동을 한 뒤 서버에서는 클라이언트의 이벤트 발생 시점으로 돌아간 뒤 실제 이동방향을 적용시키는 방식(FPS에서 쓰이는 방식)이 존재합니다.
→ 동기화를 조금 나중에 한다.
 
소켓을 서버로 전송할 때 클라이언트가 방향키를 누르고 있는 도중에도 계속 보내는 방식을 사용하기보다는 클라이언트는 방향키를 누르는 시점, 떼는 시점에만 서버로 소켓을 보내고, 소켓 통신이 안 오는 동안에는 각 클라이언트/서버가 알아서 직전 이동을 이용해서 위치를 계산하는 방식을 사용하면 패킷의 수를 줄일 수 있을 겁니다.
→ good 아이디어