- 개요
더미 클라이언트를 추가하여 서버가 긴 시간동안 많은 수의 패킷을 받아도 문제없이 동작하는지 확인하겠습니다.
서버에 더미 클라이언트를 추가하여 실제 클라이언트의 로직과 뒤섞이지 않도록 설정하겠습니다.
1) DummyClient의 구성

DummyClient는 위와 같이 구성하였습니다.
서버의 동작을 테스트하는 용도로 사용하여 간단한 동작을 수행하도록 구성하였습니다.

패킷 관련 파일을 생성하는 GenProto.bat 파일을 위와 같이 수정하여
DummyClient의 경로에도 파일을 생성하도록 설정하였습니다.
2) 서버 사이드 - DummyClient
2 - 1) PacketHandler 클래스

기존의 클라이언트에 존재하는 PacketHandler 클래스를 그대로 가져와 구성하였습니다.
불필요한 코드를 제외하고 패킷과 관련된 동작만 수행하도록 수정하였습니다.
2 - 2) ServerSession 클래스

ServerSession 클래스도 기존의 클라이언트에 있던 클래스를 그대로 가져와 구성하였습니다.
다만, DummyId 프로퍼티를 추가하여 더미 클라이언트별로 각각 다른 ID를 갖도록 설정하였습니다.
2 - 3) SessionManager 클래스

SessionManager 클래스는 더미 클라이언트별로 존재하는 ServerSession들을 관리합니다.
멤버 변수의 구성은 다음과 같습니다.
- Instance : 싱글톤 패턴을 구현
- _sessions : 존재하는 ServerSession들을 저장
- _lock : 멀티 스레드 환경에서 원자성을 보장하기 위해 사용
- _dummyId : 생성된 ServerSession들의 DummyId를 설정하기 위해 사용


Generate 함수를 호출하여 ServerSession을 생성하고 저장합니다.
또 Remove 함수를 호출하여 저장된 ServerSession을 제거합니다.
2 - 4) Program 클래스

Main 함수를 위와 같이 구성하였습니다.
DummyClientCount 프로퍼티를 사용하여 생성할 DummyClient의 개수를 지정합니다.
서버의 DB가 초기화되기까지 3초 동안 스레드를 대기시켰다가 이후 로직을 진행합니다.
Connector를 통해 DummyClientCount만큼 DummyClient의 ServerSession들을 생성합니다.
이후 CPU의 자원을 보호하기 위해 스레드를 10초 동안 대기시키는 것을 반복합니다.
3) 서버 사이드 - ServerCore
3 - 1) Listener 클래스


두 개의 함수에 예외처리 구문을 추가하여 안전성을 높였습니다.
3 - 2) Connector 클래스


두 개의 함수에 예외처리 구문을 추가하여 안전성을 높였습니다.
'대형 프로젝트 - C# + 유니티로 만드는 MMORPG 게임 개발 > (6) 라이브서비스' 카테고리의 다른 글
| 2D MMO 라이브 서비스 - (3 - 3) DummyClient (3) (0) | 2025.10.14 |
|---|---|
| 2D MMO 라이브 서비스 - (3 - 2) DummyClient (2) (0) | 2025.10.13 |
| 2D MMO 라이브 서비스 - (2 - 8) 대형 구조 마무리 (0) | 2025.10.08 |
| 2D MMO 라이브 서비스 - (2 - 7) Zone 도입 (3) (0) | 2025.10.07 |
| 2D MMO 라이브 서비스 - (2 - 6) Zone 도입 (2) (0) | 2025.10.07 |