본문 바로가기

프로그래밍

요즘 개발에서 사용하는 소켓 처리 모델~

여러가지 방식의 네트워크 처리 모델을 사용해 봤습니다. 구현 하는 네트워크 엔진에 따라 틀리겠지만, IOCP모델은 지금의 방식이 최선이라 생각됩니다. 대부분 이러한 방식의 구현 방식을 사용하시리라 생각됩니다.


사용자 삽입 이미지
Adapter
   IOCP로 할당되어 지는 모든 소켓을 관리
   - 리소스관리자

Acceptor
   AcceptEx()기반의 소켓 listener

Connector
   ConnectEx()기반의 연결 handler

Handler
  소켓과 1:1 대응되는 이벤트 핸들러
  - Cache Filter
    : 데이터 유형에 따라, Overlap되는
      cache buffer
  - Event
    : 이벤트 발생 처리를 위한 handler

실제 구현할때도 상당히 깔끔해 지는 장점이 있네요... 여러분 들의 개발 모델은 어떠세요?

참고로, 이 모델을 통해 간단히 구현한 acceptor 모델 예제를 첨부합니다.

이 모델은 데이터 처리를 위한 별도의 Backend(Working) 쓰레드를 사용하지 않고, IOCP를 쓰레드 제어에 사용
해 처리하고 있습니다. -- 물론, 데이터 처리의 copy time을 줄이기 위해서 buffer를 IOCP에 overlap 시켜 사용
합니다.