작성
·
439
0
안녕하세요. Rookiss님.
강의 참고하여 Unity 환경에서 서버/클라 개발 중 문제가 디버깅을 해도 이해가 되지 않는 부분이 있어
질문 남깁니다.
현재 서버/클라 전부 Unity 환경으로 개발중이며 RecvBuffer는 강의 그대로 사용중이고
서버/클라에 각각 JobQueue 적용, SendBuffer는 byte 배열의 깨짐이 발생하여 걷어낸 후
직접 ArraySegment를 직접 생성하는 방식으로 변경 후
아래와 같은 조건으로 테스트를 진행 했습니다.
1. 5종류의 패킷
2. 서버에서 더미 데이터를 생성.
3. 생성된 데이터를 For문을 돌려 각각 100개씩 서버에서 클라로 Send
위 조건으로 진행 했을 시, 각 패킷의 최소 1개씩은 디버깅을 통해 제대로 들어오는걸 확인 했지만
그 이후 패킷은 아래와 같이 들어옵니다.
현재 코드 상 헤더 체크를 하여 PacketCommand에 따라 Deserialize 한 후 데이터 확인을 위한
Queue에 패킷을 EnQueue하고 Queue.Count로 확인하고 있습니다.
만약 Send/Recv 도중 바이트 배열에 문제가 있었다면 헤더 체크부분에서 로그가 남을텐데
로그조차 남지 않으며 위 이미지를 보시면 5개의 패킷을 각각 100개씩 보냈으니
총 Send 패킷은 500개이며, 실제 클라에서 Recv 받은 패킷도 9 + 25 + 1 + 464 + 1 = 500으로 패킷의 수는 동일합니다.
아래는 각 100개씩 Packet을 Send 요청 부분입니다.
혹시나해서 디버깅을 해보니 최초 각 패킷 1개씩은 RegisterRecv() , OnRecvCompleted() 함수에서
브레이크포인트가 잡히나 랜덤한 시점부터 브레이크포인트가 잡히지 않고 처리 진행되는걸 확인 할 수 있었습니다.
위 현상은 패킷의 총 갯수는 같지만 Send 할 때마다 각각의 + 되는 패킷 카운트는 다르며 예외처리에도 걸리지 않고 있어
어디부터 손을 봐야할지 모르겠습니다.
그리고 또 다른 특징으로 하나의같은 패킷만 여러개 Send 시엔 정상적으로 Recv 받는걸 확인 할 수 있었습니다.
답변 2
0
디버깅 해보다가 문제 찾아서 해결했습니다. 감사합니다