Skip to content
master
Go to file
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
 
 
 
 
 
 

README.md

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 라이브러리를 사용한다.

참고 글 모음

You can’t perform that action at this time.