대형 프로젝트 - C# + 유니티로 만드는 MMORPG 게임 개발/(6) 라이브서비스

2D MMO 라이브 서비스 - (3 - 2) DummyClient (2)

monstro 2025. 10. 13. 15:15
728x90
반응형

- 개요

이전에 작성한 서버를 구성하는 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 클래스

Generate 함수 수정

 

Remove 함수 수정

 

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

 

2 - 2) ClientSession 클래스

패킷 처리와 관련된 2개의 변수

 

더미 클라이언트의 패킷 + 몬스터 AI의 패킷이 늘어나 패킷의 처리가 매우 느리게 동작합니다.

따라서 기존의 Job 처리 방식을 다음과 같이 변경합니다.

  • _reservedSendBytes : 예약된 패킷의 전체 크기를 판단하는 변수
  • _lastSendTick : 패킷이 마지막으로 보내진 시점을 판단하는 변수

 

 

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

 

 

예약된 패킷을 처리하는 FlushSend 함수에서는 예약된 패킷들을 처리하기에 충분한지 판단하고,

충분하다면 패킷의 크기 + 패킷을 보낸 시간을 캐싱하는 변수들을 초기화하고 예약된 패킷들을 처리합니다.

 

- 최종 실행 결과

동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.

 

728x90
반응형