2021. 6. 20. 21:30 Server
Socket 처리 방법들 : IOCP와 ASIO 방식 등등
Winsock 관련하여 Socket을 처리하는 방법들을 여러가지가 있다.
그중 대표적인 몆가지 방법들에 대해서 개념적으로 알아보자.
우선 소켓의 처리방식은 Proactor / Reactor 방식으로 구분된다.
. Proactor : 이벤트가 발생 시 특정 함수를 호출하는 방식
-> 밑의 ASIO, IOCP 방식이 해당
. Reactor : loop를 돌면서 이벤트가 발생했는지 일일히 확인하는 방식
-> Select , epoll 방식
Select 방식
. SingleThread 기반의 다중 I/O 처리 방법
. 송신, 수신, 예외 이벤트가 발생한 소켓들을 관리하는 3가지의 "Set"으로 구분한다.
. 각각의 Set을 매 순간 확인하여 해당 이벤트가 발생한 소켓을 목록으로 얻어온다.
. 소켓목록을 순회하며 송신, 수신, 예외에 따른 처리를 수행한다.
. 단, 최대 관리할 수 있는 소켓의 갯수는 1024개로 제한된다.
epoll 방식
. Select 방식의 단점을 보완한 리눅스에서 사용이 가능한 I/O 방식
. Select와 같은 동기형 통지방식을 따르며 FD_SET을 운영체제가 직접 관리한다.
. non blocking, blocking을 설정이 가능하다.
IOCP 방식
. c++ 게임 서버 개발자라면 필히 공부해야 하는 것.
. In/Out Completion Port의 약자
. 기본적으로 Overlapped I/O Callback 방식을 따른다.
. IOCP 내부의 Thread Pool을 사용하여 소켓의 송수신을 관리한다.
. 따라서 적은 수의 Thread 로 소켓관리가 가능하며, 별도의 Thread 생성, 제거를 할 필요가 없음.
-> Callback 함수들을 해당 Thread들을 통해 호출한다.
. 주의할 점으론 I/O가 완료된 Overllaped 구조체에 접근해야 한다는 것이다.
-> I/O 가 미완료된 Handle에 접근하면 안됨.
ASIO 방식
. Boost lib에 존재하는 방식.
. 아마도 C++ 20에 들어갈 예정이라고 한다...
. Asynchronous IO의 약자.
'Server' 카테고리의 다른 글
Process와 Thread의 차이점 (0) | 2021.06.20 |
---|---|
동기화 기법들 (0) | 2021.06.20 |
서버 Socket 설정하는 방법들 (0) | 2019.09.06 |
게임 서버에서의 Log 구성 (0) | 2019.09.04 |
게임 서버에서의 Log의 분류 (0) | 2019.09.04 |