인프런 커뮤니티 질문&답변

keti-maas님의 프로필 이미지
keti-maas

작성한 질문수

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

다수의 패킷을 동시에 Send / Recv 할 때

작성

·

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

Rookiss님의 프로필 이미지
Rookiss
지식공유자

전체 코드 압축해서 rookiss@naver.com 로 보내주시면,
시간 날 때 살펴보겠습니다.

keti-maas님의 프로필 이미지
keti-maas
질문자

디버깅 해보다가 문제 찾아서 해결했습니다. 감사합니다 

0

Rookiss님의 프로필 이미지
Rookiss
지식공유자

코드를 보지 않고 위에 내용만으로 저도 알 수 없습니다.
클라 문제인지 서버 문제인지를 알기 위해
서버에서 보내는 시점에서의 패킷 메모리를 직접 까서 살펴보길 권장드립니다.

그리고 Part4 내용으로 만드는 중이신가요?
Part7에서 SendBuffer를 없애고 Protobuf로 교체해서
사용하는 부분이 나오는데 삶이 편리해집니다.

keti-maas님의 프로필 이미지
keti-maas
질문자

서버에서 보내는 시점 메모리도 정확하게 잘 보내고 있습니다.
일단 원인을 전혀 모르겠어서.. 말씀하신대로 Protobuffer 한번 교체해볼께요.

keti-maas님의 프로필 이미지
keti-maas

작성한 질문수

질문하기