어디서 부터 정리를 해야 할지 모르겠다~
중구남방식으로 정리를 하자면

1. 윈속에는 블로킹과 넌블로킹 두가지 소켓 모드가 있다.
2. Windows 플랫폼은 기본적으로 블록킹과 넌블록킹 모드의 소켓을 지원하지만, 지원되는 기술은 Windows NT 이하에선 .. IOCP 를 사용 할수 없다.

3. 블록킹 모드란, 윈속 API 호출이 되는 얼마간의 시간동안 블록 되는것을 뜻한다.
4. 블로킹 모드와 넌블록킹 모두에는 각기 장단점이 있다. 바로 데이터 송수신하는 순서를  관리 안하느냐와 관리하는냐이다.

5. 서버는 넌블로킹 모드로 개발을 해야 하는데, 윈속에선 가장 쓰기 편하고, 가장 성능이 좋은것이 IOCP 이다.
6. Completion Port 에 소켓을 지정하고 나면 소켓 핸들에 대하여 I/O 요청 완료를 확인 할수 있다.

7. WSARecv 와 WSASend 를 이용하여 소켓 통신하는게 좋다.
8. TCP 는 패킷 순서까지 보장해 준다.

9.GetQueuedCompletionStatus 함수로 실제 두개의 키를 받는다고 이해해도 좋다.
10. OVERLAPPED 구조체를 확장해서 사용하면, 매우 우용하게 쓸수 있다(C++ 에선 상속등..)

11. overlapped 작업은 그것을 요청한 순서대로 작업이 완료되는것을 보장해 주지 않는다.(스트레스 받는 요인)
12. GetLastError 나 WSAGetLastError 를 통해 에러 코드를 구할수 있지만 윈도우 에러 메세지도 검출 된다.

13, I/O가 진행중인 OVERLAPPED 구조체를 해체하는것은 적절하지 못하다.
14. PostQueuedCompletionStatus 로 다른 쓰레드들을 종료 할수 있다.

서버의 모델중, 수 많은 것들이 존재 하지만.. 동시에 대량의 I/O를 처리해야 하는 서버의 경우 IOCP 모델을 선택하는것이 성능에 가장 좋다.





신고
posted by 농사를 짓는 게임 프로그래머 최익필

댓글을 달아 주세요