본문 바로가기
개발일지/아키텍트

Proactor with IOCP

by 사악신 2012. 2. 13.
그간 네트워크 관련 작업은 인디(Indy)에 의존하고 있었다. 하지만, 멀티플랫폼 환경(Android, Bada, iOS 등)에서 이식성을 생각하자면 아무래도 부족한 점이 많다. 하여 개인적으로 사골처럼 우려먹을 수 있는 네트워크 프레임워크를 구현하기로 마음 먹었다. 일단, 1차 결과물로 기본적인 뼈대 정도를 뽑아보았다.(델파이의 내장된 투게더의 결과물이 마음에 들지않아 자바용 UML 툴로 다이어그램을 그렸다. ㅠㅠ 덕분에 Object Pascal 과 Java 가 뒤섞인 다소 이상한 형태의 클래스 다이어그램이다.)



최초 작업은 Delphi XE2 로 윈도우즈 기반 환경이다. 대용량 접속 처리를 위해 IOCP 기반으로 하였고 demulitiplexing 및 dispatch 처리를 위하여 Asynchronous 기반의 Proactor 패턴을 사용하였다.


쓰레드풀은 Leader-Followers 패턴으로 구현하였고 Unbound thread set 이다. Proactor 는 싱클턴(Singleton) 처리하였다. 다른 OS 환경에서의 지원을 위하여 Proactor 에 Bridge 패턴을 적용할 계획이다. 물론, ACT 패턴도 적용하였다.


포인터 기반이고, TIOContext 의 Overlapped 는 IOCP 와의 연계를 위한 구조체이다. ACT 를 통하여 demultipexing 및 dispatch 가 용이하게 되었는데~ 이때 연결되는 핸들러는 Template Method 로 구현하여, 특정 서버 동작에 해당하는 핸들러를 쉽게 추가할 수 있도록 하였다.


샘플로 간단한 TCP 서버와 UDP Multicast Listener 를 구현하여 동작 점검하였다.


앞으로 Mac OS 및 Bada 에서 작동할 수 있도록 작업하며 살을 붙여나갈 생각이다. 리눅스의 epoll 을 붙여보고 싶긴 한데 아마도 가장 마지막에 시도해보지 않을까 싶다.
반응형

'개발일지 > 아키텍트' 카테고리의 다른 글

FPC 에서 Leader-Follower 패턴 구현  (0) 2012.03.09
POSA, 패턴 시스템  (0) 2012.02.14
POSA2, ACT 패턴  (0) 2012.02.08
GoF, Command 패턴  (0) 2012.02.08
POSA, Forwarder-Receiver 패턴  (0) 2012.01.31

댓글