- 개요
이전에 작성한 서버를 구성하는 Server와 DummyClient의 구조를 마저 작업하겠습니다.

작업하는 컴퓨터의 사양에 맞춰 생성되는 더미 클라이언트의 수를 500에서 100으로 수정하였습니다.
1) 서버 - DummyClient
1 - 1) ServerSession 클래스

2개의 함수에서 불필요한 로그를 찍는 코드를 제거하였습니다.
1 - 2) PacketHandler 클래스

서버로부터 전송된 S_Connect 패킷에 대응하여 더미 클라이언트로부터 C_Login 패킷을 전송합니다.
이때 패킷의 고유값으로 더미 클라이언트의 DummyId 프로퍼티를 사용합니다.

서버로부터 전송된 S_Login 패킷에 대응하여 더미 클라이언트는 다음과 같이 동작합니다.
- 로그인한 클라이언트의 플레이어가 존재하지 않는 경우 : C_CreatePlayer 패킷을 전송
- 로그인한 클라이언트의 플레이어가 존재하는 경우 : C_EnterGame 패킷을 전송

서버로부터 전송된 S_CreatePlayer 패킷에 대응하여 더미 클라이언트는 다음과 같이 동작합니다.
- 생성할 클라이언트의 플레이어가 없는 경우 : 현재는 고려하지 않음
- 생성할 클라이언트의 플레이어가 있는 경우 : C_EnterGame 패킷을 전송

서버로부터 전송된 S_EnterGame 패킷에 대응하여 더미 클라이언트는 따로 동작을 수행하지는 않습니다.
2) 서버 - Server
2 - 1) SessionManager 클래스


2개의 함수를 위와 같이 수정하여 더미 클라이언트들의 ServerSession의 개수를 출력합니다.
2 - 2) ClientSession 클래스

더미 클라이언트의 패킷 + 몬스터 AI의 패킷이 늘어나 패킷의 처리가 매우 느리게 동작합니다.
따라서 기존의 Job 처리 방식을 다음과 같이 변경합니다.
- _reservedSendBytes : 예약된 패킷의 전체 크기를 판단하는 변수
- _lastSendTick : 패킷이 마지막으로 보내진 시점을 판단하는 변수

패킷을 예약하는 Send 함수에서 예약한 패킷의 크기를 _reservedSendBytes 변수에 저장합니다.

예약된 패킷을 처리하는 FlushSend 함수에서는 예약된 패킷들을 처리하기에 충분한지 판단하고,
충분하다면 패킷의 크기 + 패킷을 보낸 시간을 캐싱하는 변수들을 초기화하고 예약된 패킷들을 처리합니다.
- 최종 실행 결과
동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.
'대형 프로젝트 - C# + 유니티로 만드는 MMORPG 게임 개발 > (6) 라이브서비스' 카테고리의 다른 글
| 2D MMO 라이브 서비스 - (4 - 1) 서버 구조 (0) | 2025.10.20 |
|---|---|
| 2D MMO 라이브 서비스 - (3 - 3) DummyClient (3) (0) | 2025.10.14 |
| 2D MMO 라이브 서비스 - (3 - 1) DummyClient (1) (0) | 2025.10.13 |
| 2D MMO 라이브 서비스 - (2 - 8) 대형 구조 마무리 (0) | 2025.10.08 |
| 2D MMO 라이브 서비스 - (2 - 7) Zone 도입 (3) (0) | 2025.10.07 |