다수의 패킷을 동시에 Send / Recv 할 때
516
작성한 질문수 5
안녕하세요. 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@naver.com 로 보내주시면,
시간 날 때 살펴보겠습니다.
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
79
2
외부 컴퓨터와의 통신 방법이 궁금합니다
0
100
1
스핀락 질문.
0
104
2





