오픈소스 C++ 네트워크 라이브러리 HalfNetwork 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는 직접 다운로드 받아서 컴파일 하셔야 합니다.

추가 1.

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

추가 2.
프로젝트를 구글코드로 옮겼습니다.
http://code.google.com/p/halfnetwork/


핑백

  • flexible gameserver : HalfNetwork 사용자를 만나다 2009-05-31 23:01:07 #

    ... 그 분이 말씀해주신 몇가지 불편사항 SourceForge에 올라와 있는 클래스 다이어그램 이해불가MFC 유저를 위한 배려 부족SourceForge에 카테고리 분류가 이상한 듯1번은 여기와 여기에 있는 클래스 다이어그램인데, 생각해보니 라이브러리에 대해 자세히 알고 싶은 사람들을 위한 그림이었고 라이브러리 사용자들은 몰라도 되는 그림이더군요. 그래서 아래 그림 ... more

  • flexible gameserver : HalfNetwork 0.6.0 릴리즈 2009-12-15 12:06:24 #

    ... 이 사용이 가능하고 소스를 수정하셔도 공개의 의무는 없습니다. 사용중 문의사항은 제 이메일로 주시거나 메일링 리스트로 보내주시면 됩니다. 첫 버젼 릴리즈 한게 작년 12월 17일이니 1년만에 메이져 릴리즈를 하게 되었네요. 이 프로젝트를 꾸준히 할수 있다는 사실이 기쁩니다. :) ... more

덧글

댓글 입력 영역