sendbuffer에 관하여 질문있습니다
패킷을 만들면서 생각해보니 결국 마지막 count 값이 보낼 패킷의 전체 크기를 나타내는것 같은데
그렇다면 각 패킷마다 count를 먼저 계산하고 해당 count 크기의 바이트 배열을 만든다음 이 배열에 정보를 넣어서 보내는 방법이 더 메모리를 아낄 수 있지 않나요?
앞선 강의(SendBuffer)에선 가변적인 패킷의 길이를 알 수 없으므로 무작정 크게 잡는것이 메모리 낭비라고 하셨는데 count를 통해 패킷의 전체 크기를 알기 때문에 딱 맞춰서 보낼 수 있지 않나요?
回答 3
2
아하 질문을 잘못 이해했네요.
패킷 데이터를 먼저 채우고 -> 크기를 계산한 다음 -> 버퍼를 딱 그만큼 할당
위 흐름을 말씀하시는거군요.
다시 답변을 드리자면, 물론 그것도 가능합니다.
실제로 Part7에서 ProtoBuff로 이식할 때는 그런 방식으로 수정될 예정입니다.
다만 C++에서는 패킷 데이터를 채운 다음에 버퍼를 만드는게 아니라,
바로 버퍼에 데이터를 복사하면서 패킷을 만드는 방식이 있는데
ProtoBuff와 쌍을 이루는 FlatBuffer가 그런 방식으로 되어 있습니다.
(그러면 중간 복사 과정을 한 번 덜어낼 수 있어서 성능에 장점이 있습니다.)
1
좋은 시도이지만, 각 패킷마다 count를 미리 계산할 수 없다는 함정이 있습니다.
가령 패킷에 길드이름이나 유저이름을(string) 받는다면,
해당 문자열의 사이즈가 얼마가 될지 모르니 무조건 최대 사이즈로 잡을 수밖에 없겠죠.
마찬가지로 몬스터 리스트라거나 가변 데이터를 넣을 일이 빈번하기 때문에
동일한 패킷이라 하더라도 상황에 따라 크기가 바뀔 수 있습니다.
0
답변 감사합니다!
아래와 같은 경우처럼 가변적인 경우에도 count값을 구할 수 있지 않나요?
패킷의 Write함수를 위와 같이 사용하면 가변적인 string 크기에도 맞추어서 버퍼 할당이 가능하지 않나요?
TLS 질문드립니다.
0
43
2
SpinLock과 컨텍스트스위칭에 대해 질문 남겨요.
0
48
2
Unity Span
0
76
2
XML, Dll 차이점
0
105
2
Session 질문입니다
0
80
1
Write Read 커서 키워드
0
76
1
더미 클라이언트 수에 따른 OnDisconnect 발생
0
70
2
네트워크 Send 전담 스레드 배치
0
98
2
UnhandledException 으로 서버 터지는 경우
0
86
2
컨텐츠 단, 엔진 단
0
106
1
질문 있습니다
0
77
2
C# 게임서버 3D MMORPG
0
147
2
유니티6 버전
0
98
2
receive하는 부분과 send하는 부분의 차이
0
134
2
커서의 위치의 중요성
0
103
2
C++ 전혀 모르는데 C# 서버
0
169
2
강의에 질문이 있습니다
0
86
2
멀티스레드 이해도 질문
0
95
1
500 vs 500
0
130
3
OnAcceptHandler 액션 함수
0
61
1
이 정도 서버의 객관적인 수준이 궁금합니다.
0
193
2
36. Serialization #3 에서 string (name) 코드 수정 질문
0
82
2
외부 컴퓨터와의 통신 방법이 궁금합니다
0
106
1
스핀락 질문.
0
110
2

