2024-11-03 CH-5 개인과제 (멀티 플레이 과제) 개인 과제 제출 후 추가 (트러블 슈팅)

MOON·2024년 11월 3일
0

내일배움캠프 과제

목록 보기
26/36

저번주 금요일에 DB 연결 후 게임 종료시 마지막 위치 저장 후 게임 실행시 마지막 위치에서 생성되게까지 만들고 과제를 제출하였습니다.

그리고 못했던 부분이 있어 해설영상을 보면서 나머지 ping을 체크하는 로직을 따라서 작성하고 테스트 중 문제가 발생하였습니다.

두둥!

문제

유저의 id와 레이턴시를 console.log를 통해 확인하던 부분입니다. 근데 비정상적으로 많은 로그와 클라이언트에서도 수 많은 로그가 찍혀 무언가 문제가 생겼습니다...

추가로 한 게임 세션에서 두개의 클라이언트를 실행하였을때 서로의 캐릭터가 생성되질 않았습니다. 즉 멀티플레이가 이루어지지 않았습니다. <- 원래 되었던 것이 안되니 왜이러지 싶었습니다..

handlePong 함수 (해당 클라이언트로부터 data를 받아 레이턴시를 계산하는 역할을 하는 함수입니다.)
그래서 추가로 data도 로그를 확인해 보았습니다. 그런데 어라? 다 0으로 나오는 것이 이상했습니다. 원래 밑에 로그처럼 정상적으로 값이 들어있어야 했습니다.

아 진짜 여러가지 클라이언트 코드도 확인해보고 여러 서버의 코드도 구조적으로 게임이 시작-> 클라이언트 요청 -> 서버의 확인 및 응답 -> 서버의 지속적인 응답(다른 유저의 위치정보) 아무리 확인해도 전부 제대로 작성한 것 같아 보였습니다.. 분명 잘못 작성된게 있을텐데ㅠㅠ

그러다 멀티플레이는 원래 되었던 거니 그냥 깃허브에서 전에 merge한 기록들을 찾아 보았습니다.

모든 원인을 찾았습니다! 해당 함수는(게임 세션의 다른 유저들의 위치값들을 계산하여 클라이언트에게 보낼 알맞는 패킷으로 정의해 두어 반환하는 함수입니다.) return하는 부분이 문제였습니다.
원래는 정의해둔 Location 패킷 타입으로 만들어서 보내주어 하는데 ping패킷 타입으로 만들어 주는 함수로 잘못 실행되고 있었습니다.

정리

서버에서 지속으로 다른 플레이어들의 위치 값을 보내주기로한 로직에서 ping패킷 타입으로 전달해 주어 클라이언트는 ping 패킷 타입인줄 알고 ping 패킷과 관련된 로직들을 실행하고 있던 것이였습니다.

그래서 원래 해당 정의해둔 패킷 Location패킷타입으로 정의해둔 로직들이 실행이 안되면서 멀티플레이도 안되었던 것이고 로그가 비정상적으로 많이 찍혔던 것도 지속적으로 데이터 전송이 이루어 지면서 발생한 현상이였습니다.

그래서 해당 Location 패킷 타입으로 만들어 주는 코드로 변경하여 로그를 찍어 보니 정상작동 되는 것을 확인했습니다.

// 참고용으로 해당 패킷을 만드는 함수들을 가져와 보았습니다.

정상작동 테스트 확인



추가 예외 처리


혹시 몰라 예외 처리도 해주었습니다.

오늘의 회고

일단 드디어 저번주 금요일에 과제 제출을 하고 이후에 강의를 보고 따라 만들어 보면서 다시한번 구조에 대해 알아 보았고 그리고 발생한 에러를 통해 진짜 게임의 시작 부터 어떻게 패킷을 주고 받는지 구조에 대해 생각하면서 패킷의 구조(프로토 버프 구조)들을 다시 한번 찾아보고 여러 생각을 했어서 좋았고 이런 버그? 에러? 사항들을 고치는 작업은 힘들지만 느껴지는게 많고 생각할 수 있게끔 만드는 경험인 것 같네요

그럼 오늘도 화이팅

profile
안녕하세요

0개의 댓글