edu_cpp_IOCP icon indicating copy to clipboard operation
edu_cpp_IOCP copied to clipboard

IOCP 실습

IOCP 실습

코드에 버그가 있을 수 있다.(버그를 잡는 것도 공부!)
Modern C++을 적극적으로 사용하는 것을 추천한다.

'Tutorial/ChatServerWithLogger' 있는 프로젝트는 채팅 서버에 plog 라이브러리를 사용하고 있으며, Windows Event Log에 로그 데이터를 기록할 수 있다.

실습 계획

참석자의 실력에 따라 편차가 있겠지만 기본적으로 1회 모임에 2단계씩 진행을 한다.

  • 모임에서 직접 구현하기

  • 다음 모임까지 해야할 과제(과제를 구현한 코드는 다음에 모임에 배포 예정)

    • 과제로 구현할 기능을 이미 구현한 코드를 보여주면서 설명을 해줌(이렇게 해야 명확하게 무엇을 구현해야 할지 알 수 있을테니)
  • 1 단계. Echo 서버 코드 이해

    • IOCP에 대해서 설명한다.
  • 2 단계. OverlappedEx에 있는 버퍼 stClientInfo 구조체로 이동하기

  • 3 단계. 애플리케이션과 네트워크 코드 분리하기

    • 연결, 끊어짐, 데이터 받음을 애플리케이션에 전달하기
  • 4 단계. 네트워크와 로직 처리를 스레드 분리하기

    • Send를 Recv와 다른 스레드에서 하기
    • send를 연속으로 보낼 수 있는 구조가 되어야 한다.
  • 5 단계. 1-Send 구현하기

    • 버퍼에 쌓아 놓고, send 스레드에서 보내기.
  • 6 단계. 1-Send 구현하기

    • queue에 담아 놓고 순차적으로 보내기.
  • 7 단계. 비동기 Accept 사용하기

  • 8 단계 채팅 서버 만들기

    • 패킷 구조 사용하기, 로그인
  • 9 단계. 로그인 때 Redis 사용하기

  • 10 단계. 방 입장, 방 나가기, 방 채팅 구현하기

더 진행 한다면...

  • 11 단계. 최적화 하기
    • GetQueuedCompletionStatusEx 버전 사용하기
    • 서버에서 사용하는 설정을 입력 받기
    • 동적 할당을 최소화 하기
    • 링버퍼 구현 추가(덮어 쓰기 방지)
    • Lock 사용 범위를 줄이거나 좀 더 가벼운 Lock 사용하기
    • 더미 클라이언트로 테스트 하기
  • 12 단계. Network, Content, Host 각 레이어로 프로젝트 나누기
    • Network, Content는 각각 정적 라이브러리로 만든다.
    • Host는 콘솔 프로젝트. Network, Content 라이브러리를 사용한다.

참고 글 모음