출처 : http://javawork.egloos.com/category/Programming
오픈소스 C++ 네트워크 라이브러리 HalfNetwork을 소개합니다.
HalfNetwork은 ACE를 사용하여 만들어진 C++ 네트워크 라이브러리 입니다. 전체적인 디자인은 Half-sync Half-async pattern(POSA2)을 구현하고 있습니다.
가능하면 사용자입장에서 쉽게 사용할 수 있도록 만들었습니다. Proactor Acceptor의 예를 들면 아래의 코드만으로 listen을 시작합니다.
그 다음에는 큐에 들어오는 connect/read 등에 대한 메세지를 받아서 처리하기만 하면 됩니다.
라이브러리는 가능한 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
패킷 생성기를 추가했습니다.
오픈소스 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 |