NHN NEXT의 첫번째 게임 프로젝트를 위한 교육용 게임 서버 기반 코드 입니다.
Windows의 Overlapped I/O를 이용한 single-thread 기반의 asynchronous non-blocking 방식의 TCP 서버입니다.
EasyGameServer는 기본적으로 3개의 thread로 구성 됩니다.
- 프로그램의 초기화 및 진입을 담당하고 ACCEPT를 처리하는 main thread
- 클라이언트 세션 처리, 클라이언트 타이머 및 I/O를 담당하는 client handling thread
- 데이터베이스 처리를 담당하는 database handling thread
-
Win32 API의 Overlapped I/O를 이용한 비동기 네트워크 입출력 및 다수의 클라이언트 세션 처리
-
TCP 스트림을 다루는 방법 및 TCP 스트림을 통한 패킷 시리얼라이징, Circular Byte Buffer를 구성하고 다루는 법, NAGLE (TCP_NODELAY) 컨트롤
-
게임 클라이언트에서의 네트워크 처리 방법, Asyncselect를 이용한 asynchronous non-blocking 방식의 클라이언트 구조
-
SQLite3을 이용한 Database 처리 방법, C++상에서의 데이터베이스 제어, Half-sync Half-async 패턴을 이용한 데이터베이스 처리 전용 스레드의 사용법, Wait-free Single Producer Single Consumer Queue를 구현하는 방법
-
Windows APC(Async Procedure Call) 큐의 개념 이해와 더불어 Waitable Timer를 이용한 게임 타이머 구성 방법
-
서버에서의 예외 상황 발생시 minidump 생성 방법
-
Object Pooling을 통한 메모리 할당/해제 성능 향상 방법
-
Thread local storage의 사용 방법
-
그 이외 C++ 11의 몇몇 특징 사용 방법
- multi-thread 기반의 IOCP를 이용한 서버 만들기 방법
- 스마트 포인터 등을 통한 객체의 생명 관리
- 고성능 서버 제작을 위한 각종 튜닝 기법들
- 암호화, 해킹방어 등과 같은 각종 보안 기법들
- 게임 콘텐츠에 관련된 각종 구현 방법들