반응형

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
Posted by Sweetmeats_boy

블로그 이미지
Sweetmeats_boy

태그목록

Yesterday
Today
Total

달력

 « |  » 2025.2
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함