NHN NEXT 게임 서버 프로그래밍 강의 자료입니다. 최소한의 필요한 이론 내용은 질문 위주로 구성되어 있고 (답은 학생들 개별로 고민해와서 피드백 받는 방식) 해당 내용에 맞는 실습(구현) 과제가 포함되어 있습니다.
참고로, 서버 아키텍처에 관한 과목은 따로 있어서 본 강의에는 포함되어 있지 않습니다.
3. TCP NAGLE
• NAGLE Algorithm
– 왜 필요한가?
• 게임 서버에서는?
– 동작 원리는? (그림으로…)
– ON/OFF 방법 (코드로…)
4. TCP의 상태
• TCP의 단절 감지
– 상대가 끊겼음에도 감지를 못할 수 있다. (유령세션) 왜?
– TCP state diagram으로 설명
– 게임 서버에서 어떻게 단절을 감지하고 처리해야 할까?
• TCP LINGER 옵션
– 왜 필요하고 어떤 경우에 쓰는가?
– 사용법 (코드로..)
• Graceful Shutdown
– 우아한 연결 종료는 어떻게 하면 될까?
8. I/O 이벤트 통지 모델
• 구세대 네트워크 I/O 방식
– (예) 아파치 웹서버
• 그래서, I/O 이벤트 통지 모델이 필요한 이유는?
9. SELECT 방식
• POSIX 표준
– 동작 원리?
– 장점 및 단점?
• 이 방식은
– Synchronous or Asynchronous중 어디에 해당?
– Blocking or Non-blocking중 어디에 해당?
10. EPOLL 방식
• 리눅스 커널 2.6 이상 지원
– 장점 및 단점은?
– 동작 원리?
• 비슷한 것으로 BSD의 kqueue
• 이 방식은
– Synchronous or Asynchronous중 어디에 해당?
– Blocking or Non-blocking중 어디에 해당?
11. Windows I/O 통지 모델
• WSAAsyncSelect
– 특징? 장/단점?
• WSAEventSelect
– 특징? 장/단점?
• Overlapped I/O Callback
– 특징? 장/단점?
– EasyGameServer 참고
• 각각의 방식은
– Synchronous or Asynchronous중 어디에 해당?
– Blocking or Non-blocking중 어디에 해당?
12. Windows I/O 통지 모델 - IOCP
• I/O Completion Port
– 이 부분은 다음 시간에 과제로 나갈 예정…
– Windows via C++ 5th edition chapter 10 참고
13. 보너스 과제: 코루틴 (Co-routine)
• 개념 및 동작구조는?
• 왜 쓸까?
• C++에서는 지원하는가?
• Asynchronous + Blocking의 개념으로 설명 가능한가?