inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

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

516

keti-maas

작성한 질문수 5

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 받는걸 확인 할 수 있었습니다.

network unity C#

답변 2

0

Rookiss

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

0

keti-maas

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

0

Rookiss

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

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

0

keti-maas

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

TLS 질문드립니다.

0

36

2

SpinLock과 컨텍스트스위칭에 대해 질문 남겨요.

0

41

2

Unity Span

0

67

2

XML, Dll 차이점

0

99

2

Session 질문입니다

0

75

1

Write Read 커서 키워드

0

69

1

더미 클라이언트 수에 따른 OnDisconnect 발생

0

65

2

네트워크 Send 전담 스레드 배치

0

94

2

UnhandledException 으로 서버 터지는 경우

0

82

2

컨텐츠 단, 엔진 단

0

100

1

질문 있습니다

0

73

2

C# 게임서버 3D MMORPG

0

141

2

유니티6 버전

0

94

2

receive하는 부분과 send하는 부분의 차이

0

128

2

커서의 위치의 중요성

0

99

2

C++ 전혀 모르는데 C# 서버

0

164

2

강의에 질문이 있습니다

0

83

2

멀티스레드 이해도 질문

0

90

1

500 vs 500

0

122

3

OnAcceptHandler 액션 함수

0

57

1

이 정도 서버의 객관적인 수준이 궁금합니다.

0

185

2

36. Serialization #3 에서 string (name) 코드 수정 질문

0

78

2

외부 컴퓨터와의 통신 방법이 궁금합니다

0

100

1

스핀락 질문.

0

104

2