[C++] Service
·
Study/C++ & C#
오늘도 최대한 메모해 보자. 1. Service란? 여기서 서비스란 흩어져 있는 여러 기능들을 한 곳에 모아둬, 보다 편하게 사용할 수 있게 한 집합이다. 언제 리스너/송신/수신 오브젝트를 일일이 만들고 설정한단 말인가? 이전에 했던 일련의 작업들이 서비스에 포함된 상태로 동작할 것이다. 라이브 서비스에선 모든 기능을 하나의 서버에 두는 것이 아니라, 목적에 맞게 서버를 분산해 운용한다. 서버끼리 붙어야 할 일도 생길 수 있기 때문에 이에 대응해야 한다. 세션이 서버일 수도 있고 클라이언트일 수도 있기 때문에, Service라는 클래스를 두어 정책을 구분해 운용하기로 한 것이다. 1. 문제 해결 부터 본격적으로 Service에 대한 구현에 들어가기 전에 이전 과정의 문제에 대한 수정이 필요하다. 우린 C..
[C++] Completion Port Model
·
Study/C++ & C#
대망의 IOCP. 이번에도 최대한 기억을 짜내서 메모해 보자. 1. Completion Model의 개념 Overlapped 모델을 생각해 보자. 이 모델 APC큐가 스레드마다 있었다. 따라서 어찌 보면 스레드가 낭비되는 느낌이 있었는데, IOCP는 그렇지 않다. APC큐가 스레드마다 있지 않고 딱 1개가 있다. 중앙에서 관리하는 APC큐라는 느낌으로 보면 딱 맞을 것이다. Alertable Wait 상태로 들어가기 위해 GetQueuedCompletionStatus()라는 함수를 사용해야 한다. 여기까지만 보면 Overlapped 모델과 흐름상의 큰 차이는 없지만, 결과적으로 IOCP는 스레드와의 궁합이 매우 좋기 때문에 매우 성능이 좋은 모델이라 할 수 있다. 1-1. 사용할 함수 CreateIoCo..
[C++] WSAEventSelect Model
·
Study/C++ & C#
이전 Select Model에 이어 WSAEventSelect Model에 대해 공부해 보자. 1. WSAEventSelect 모델의 개념 WSAEventSelect함수가 핵심이 되는 모델이다. 소켓과 관련한 네트워크 이벤트를 이벤트 객체를 통해 감지한다. 1.1. 이벤트 객체 관련 객체 관련해서 사용하는 함수는 아래와 같다. WSACreateEvent 이벤트 객체를 생성한다. Manual-Reset, Non-Signaled 상태에서 시작한다. WSACloseEvent 이벤트 객체를 삭제한다. WSAWaitForMultipleEvents 이벤트 발생을 감지한다. WSAEnumNetworkEvents 구체적으로 어떤 이벤트가 일어났는지를 확인한다. 1.2. 소켓 - 이벤트 객체 연동 WSAEventSele..
[C++] Select Model
·
Study/C++ & C#
학교에서 처음 소켓 프로그래밍을 배웠던 기억이 난다. 리눅스 환경도 낯선데, 갑자기 처음 보는 함수가 엄청 나와서 많이 당황했었다. 어찌저찌 실행시키니 정상적으로 작동하는 것을 보고 신기해했었던 것 같다. 하지만 그런 블로킹 방식의 소켓 구현으로는 실용적인 서버를 개발할 수 없다. 기본적인 모델이면서도 다양하게 활용될 수 있는 Select 모델에 대해 알아봤다. 1. Select 모델의 개념 Select 모델은 select 라는 함수가 핵심이 되기 때문에 이런 이름이 붙었다. 서버단에선 이 모델을 활용해서 수백 또는 수천의 세션을 관리하기엔 무리가 있을 수 있다. 하지만 대규모 동시 접속이 필요없는 클라이언트단에선 여전히 사용되기도 한다. 네트워크 프로그래밍의 지식을 쌓는다는 목적으로도 좋다. Selec..