지우너
[C# 게임서버] 네트워크 프로그래밍(3) 본문
1. Session #3
SendAsync() 호출 횟수 줄이기
지난 시간에 했던 내용 중 하나는 recvArgs와 sendArgs를 사용하는 방법이었다. 이 부분이 굉장히 중요한데 나중에 C++서버를 만들 때도 진짜 비슷하게 만들게 될 거니까 이 부분을 유심히 살펴보면 좋을 것 같다.
중요했던 것 중 하나는 SetBuffer를 하는 부분
Receive 같은 경우 초기에 recvArgs.SetBuffer(new byte[1024], 0, 1024); 이렇게 빈 버퍼를 연결만 해주었다. 그러면 나중에 클라이언트 쪽에서 데이터를 우리에게 보내고, 그 데이터가 우리가 연결한 버퍼에 저장이 된다.
Send 같은 경우, 얘도 같은 인터페이스인 SetBuffer를 사용하기는 하는데, 얘가 SetBuffer를 하는 건 실제 우리가 보낼 데이터가 있는 버퍼에다가 그 버퍼의 길이를 넣어준 것이다(_sendArgs.SetBuffer(buff, 0, buff.Length);).
우선 인터페이스를 맞춰주기 위해 recvArgs를 클래스의 멤버변수로 만들어 주자. RegisterRecv()는 그럼 매개변수가 필요없어진다. 관련 사항들을 수정해줄 것(빨간 박스로 체크한 부분이 수정된 부분).
1.1. SocketAsyncEventArgs.BufferList로 SendAsync 최적화하기
1.1.1. BufferList 올바른 사용법: List<ArraySegment<byte>> 만들어서 대입
SocketAsyncEventArgs.BufferList Property
위 ArraySegment<T> Struct 링크에 있는 예제 코드가 ArraySegment를 이해하는 데에 도움이 될 것 같아 가볍게 정리해봤다.
1.1.2. List<ArraySegment<byte>>를 멤버변수로 만들기
1.2. 코드 흐름 중간 점검
1.2.1.Send(), RegisterSend()
1.2.2. OnSendCompleted()
1.3. 남아 있는 문제점
2. Session #4
엔진과 컨텐츠 분리하기. 컨텐츠를 만들 때 그 존에 있는 모든 행위를 다 기록해서 한 번에 모아보내도록 수정하고 싶으니까.
정리 및 남아있는 문제점
[참고 사이트]
[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
[Swift] Struct와 Class를 메모리 원리부터 자세하게 비교해보자
'Programming > Server' 카테고리의 다른 글
[C# 게임서버] 네트워크 프로그래밍(2) (0) | 2024.01.19 |
---|---|
[C# 게임서버] 네트워크 프로그래밍(1) (0) | 2024.01.16 |
[C# 게임 서버] 멀티쓰레드 프로그래밍(4) (0) | 2024.01.14 |
[C# 게임 서버] 멀티쓰레드 프로그래밍(3) (0) | 2024.01.12 |
[C# 게임 서버] 멀티쓰레드 프로그래밍(2) (0) | 2024.01.11 |