본문 바로가기

PROJECTS

사용 툴 및 기술 소개



사용 프로그램

○ Unity 5.6.1f

○ Visual Studio 2013

○ MySQL

○ Autodesk 3dsMax 2014

○ Adobe Photoshop CS6



프로그래밍 언어

○ C++ ( 서버 )

○ C# ( 클라이언트 )


클라이언트 스레드 구조

○ 메인 스레드 ( 유니티 엔진 처리 )

수신 큐에 데이터가 존재하면 그에 따른 게임 처리 및 물리 처리


○ 워커 스레드1 ( 수신을 담당 )

서버에서 패킷을 수신하면 큐에 패킷을 분해하여 큐에 넣는다.


○ 워커 스레드2 ( 송신을 담당 )

송신용 딕셔너리에 송신할 데이터가 생기면 패킷으로 조립하여 서버측에 송신한다.



서버 스레드 구조 (IOCP 모델 사용)

○ 메인 스레드 ( 접속 처리 )

초기에 필요한 매니저(싱글톤)들을 생성하고 DB에 접속 이후 접속 처리만을 담당한다.


○ 워커 스레드 ( 송·수신 처리 / CPU갯수 * 2)

- 수신시 패킷 분해를 하고 분해 -> 큐에 데이터가 존재하면 그 데이터에 대한 처리 

  -> 데이터 처리 종료 후 WSARecvEX(사용자 정의 수신함수)함수를 호출하여 수신 완료 패킷을 기다린다.

- 수신 처리를 하면서 보낼 데이터가 생기면 조립하여 송신 큐 또는 맵(한 번에 여러가지 종류의 패킷을 송신할 경우)에 조립하여 저장

- 송신 큐의 SIZE가 1이면 WSASendEX(사용자 정의 송신함수)함수를 호출하여 백그라운드에서 송신 처리를 한다.

송신 완료 패킷이 도착 -> 송신 큐에 보낼 패킷이 있으면 백그라운드에서 송신 -> 송신 완료 패킷이 도착 -> 송신 큐에 보낼 패킷이 있으면 백그라운드에서 송신 … 반복


○ 게임 스레드 ( 프레임 동기화 및 게임 로직 처리 )

- 게임이 시작되는 방이 존재하면 방마다 생성되는 스레드이며 게임 종료시 소멸된다. 

- 스레드 갯수가 많다는 것은 스레드 콘텍스트 스위칭간의 오버헤드가 커진다는 것으로 좋지는 않은 방법이다. (보안 필요)

- 클라이언트 간의 프레임 동기화 (30프레임)

- 게임이 진행되는 동안 모든 게임에 관련된 처리를 한다. (EX. 이동, 스킬, 상태 이상, 데미지 처리 등등)


'PROJECTS' 카테고리의 다른 글

그라티아 레이스(Gratia Race) 소개  (0) 2018.07.08