출처 : http://javawork.egloos.com/category/Programming

오픈소스 C++ 네트워크 라이브러리 HalfNetwork을 소개합니다.

HalfNetwork은 ACE를 사용하여 만들어진 C++ 네트워크 라이브러리 입니다. 전체적인 디자인은 Half-sync Half-async pattern(POSA2)을 구현하고 있습니다.

가능하면 사용자입장에서 쉽게 사용할 수 있도록 만들었습니다. Proactor Acceptor의 예를 들면 아래의 코드만으로 listen을 시작합니다.

ProactorManagerInstance->AddAcceptor(server_port, Recv_Queue_ID);
ProactorManagerInstance->Open();

그 다음에는 큐에 들어오는 connect/read 등에 대한 메세지를 받아서 처리하기만 하면 됩니다.

ACE_Message_Block* commandBlock = NULL;
ProactorManagerInstance->PopMessage(queue_id, &commandBlock);
...
switch(postee.command)
{
case MessageHeader::ESTABLISH:
    ...
    break;
case MessageHeader::READ:
    ...
    break;
case MessageHeader::CLOSE:
    ...
    break;
}

라이브러리는 가능한 ACE의 API 만을 사용했습니다. 컨테이너도 STL을 사용하지 않고 ACE의 컨테이너를 사용했습니다. 현재는 windows에서만 테스트 되었지만, 조금만 손을 보면 ACE가 지원하는 다른 OS에서도 사용이 가능할거라 생각합니다.

이 라이브러리를 사용하면 네트워크 프로그램을 좀 더 쉽게 작성할 수 있을 것입니다.  또는 라이브러리를 사용하지 않더라도 사용된 ACE코드들을 통해 ACE의 올바른 사용법에 대해서도 배울수 있을 것입니다.

네트워크 모델은 Proactor와 Reactor 두가지가 있습니다. windows에서 Proactor는 IOCP를 사용하고,Reactor는 WaitForMultipleObjects를 사용합니다. 이 두가지 모델 모두 Acceptor와Connector를 붙일수 있습니다.

Proactor Model


Reactor Model


아래 주소에서 다운로드 받으실 수 있습니다
https://sourceforge.net/projects/halfnetwork/

소스를 받으시면 2개의 솔루션 파일(vc8/vc9)과 6개의 프로젝트가 있습니다.
HalfNetworkLib : 라이브러리 프로젝트
ProactorServer : Proactor를 사용한 Acceptor 예제
ProactorClient : Proactor를 사용한 Connector 예제
ReactorServer : Reactor를 사용한 Acceptor 예제
ReactorClient : Reactor를 사용한 Connector 예제
Testcase : HalfNetworkLib에 대한 UnitTest 프로젝트(UnitTest++)

테스트된 환경
OS : Windows XP, 2003 Server
개발툴 : vc8(vc2005), vc8 sp1, vc9(vc2008)
ACE 버젼 : 5.5, 5.6

ACE의 라이센스 정책을 따릅니다.(아무 제한 없음)
http://www.cs.wustl.edu/~schmidt/ACE-copying.html

ACE는 직접 다운로드 받아서 컴파일 하셔야 합니다.

추가.

한글 위키(튜토리얼, 변경사항 등)
http://halfnetwork.springnote.com

패킷 생성기를 추가했습니다.

'Data Struct & Algoritm > ACE 프레임워크&ASIO' 카테고리의 다른 글

Boost ASIO 자료  (0) 2009.02.04
ACE :: Proactor  (0) 2009.02.02
ACE 관련 정리된 사이트 [joinc]  (0) 2009.02.02
ACE 프레임워크 책  (0) 2009.02.01
ACE [ Adaptive Communication Environment ]  (0) 2009.02.01
Posted by 몽센트