DevLog

IOCP방식의 TCP 기반 채팅 서버/클라이언트

게임 만드는 나무꾼 2022. 10. 26. 12:51

01. 구동 영상

02. 주요 구현 내용

  • IOCP 구현
  • 서버가 다수의 클라이언트를 관리하는 과정에서의 임계영역 동기화를 위한 Ciritical Section 사용
  • 클라이언트는 전송/수신 스레드로 나누어 멀티스레드로 구현

03. 후기

  • 다수의 스레드가 Blocked상태로 대기하다가, IO Complete 이벤트가 발생하면 처리하는 IOCP를 이해할 수 있었다.
  • 비동기 IO와 Overlapped IO에 대해 이해할 수 있었다.
    • 동기 IO보다 좋은 점은 Write/Recv해놓고 다른 걸 처리할 수 있다는 점?
    • 하지만 IO 상태를 확인해야 한다는 점에서 코드가 복잡해지는 느낌
  • 하나의 소켓당 하나의 스레드를 할당하는 방식보다 적게 스레드를 사용하고도 효율적으로 처리할 수 있을듯 하다.
  • Select방식과 비교해보면, 멀티스레드를 사용하므로 많은 수의 클라이언트가 통신을 주고받는 구조에서 효율적일듯
  • 하지만 어떤 스레드가 어떤 소켓의 IO를 처리할 지 모르니까 디버깅이 까다로울듯 하다.

GitHub Link

https://github.com/KimNamWook316/IOCP_Chatting