멀티플레이어 게임을위한 단독으로 실행가능한( 서버로직+클라이언트 로직) 어플리케이션 구조를 먼저 살펴보자
베이스는 Spring Boot Application을 그대로 이용했으며 , spring boot start(https://start.spring.io/) 를 이용하였다.
- actor : 게임 로직을 액터패턴으로 구성하였다.
- thread : 게임 로직을 스레드를 사용하여 구성하였다. actor와 thread 둘중하나를 선택할수 있다.
- config : 웹소켓/AKKA/어플리케이션 구성을 위한 설정에 관련된 파일이 있다.
- controler : 웹접근 엔드포인트가 정의되어 있으며, 클라이언트는 실제 이 경로를 통해 메시지 전송이 가능하다.
- gameobj : 게임에 이용되는 오브젝트를 정의한다.
- message : 서버 to 서버 , 서버 to client 를 비롯하여 통신에 사용되는 메시지들을 정의한다.
- resources-static : 스탠드 얼론으로 작동시키기 위해 클라이언트의 웹리소스(html/js)를 이곳에서 포함하였다. -최근 모던웹은 분리하는 추세이나 ,프로토타잎에서 분리하는것은 바람직하지 않다.
- test : JUNIT을 활용한 각종 유닛 테스트들을 정의한다. / 비동기 메시지 게임로직을 유닛테스트로 할수 있는 방법 연구도 이 프로젝트의 일부입니다.
참고자료 : 몇가지 게임서버를 작성하는 패턴을 살펴보는것은 도움이 된다. 이 프로젝트에서는 단순하게 액터만 이용을 하고
여기서 활용을 못했지만, Akka Steam/Akka FSM 등 게임의상태와 메시지를 더 우아하게 처리하는 방법이 아래에 소개되어 있으며
언젠가 적용을 시킬것이다.
- https://doc.akka.io/docs/akka/2.5/fsm.html
- https://doc.akka.io/docs/akka/2.5/stream/
- https://github.com/leetoo/akka-game-server
- https://github.com/matifraga/Akka-Server