Upload
shannon-manning
View
274
Download
0
Embed Size (px)
Citation preview
ACE 를 이용하여 만든 C++ 네트워크 라이브러리 Half-Sync / Half-Async(POSA2) 패턴의 구현물
HalfNetwork 란
Open source object-oriented framework Socket / Thread / Lock / Buffer 여러 패턴의 집약체
◦ Wrapper Façade ◦ Adaptor◦ Composite
ACE
$ACE_ROOT : ACE_wrappers 폴더 $ACE_ROOT/ace/config.h 생성
◦ #define ACE_HAS_STANDARD_CPP_LIBRARY 1◦ #define ACE_USES_WCHAR 1◦ #include "ace/config-win32.h“
$ACE_ROOT/ace/ace_Static.sln 컴파일 aces.lib acesd.lib ACE_AS_STATIC_LIBS 선언
ACE 컴파일
Half-Sync / Half-Async Pattern
Queue
Library
Application
MessageBlock
Message_Block 의 기능 #1 버퍼 관리
ReadPtr
WritePtr
Size
Size = block.size(); // SizeLength = block.length(); // WritePtr – ReadPtrSpace = block.space(); // Size – WritePtr
0
memcpy(buffer, block.rd_ptr(), block.length());
block.rd_ptr(block.length());
Block 에서 읽어오기
Block 에 쓰기
block.copy(buffer, write_length);
Message_Block 의 기능 #2Chained Message_Block
Block
Next
• Head 만 넘기면 됨• 데이터 복사를 줄여준다• Composite 패턴
Queue 에서 꺼냈을 때(PopMessage)
Command Block Payload Block
•CONNECT•ACCEPT
ESTAB-LISH
•RECEIVEREAD
•CLOSECLOSE
Command Block
ACE_Message_Block* commandBlock = NULL;NetworkFacade->PopMessage(queue_id, &commandBlock, -1);...switch(postee.command){case MessageHeader::ESTABLISH: ... break;case MessageHeader::READ: ... break;case MessageHeader::CLOSE: ... break;}
패킷 처리 코드
•IPESTAB-LISH
•Recv DataREAD
•IPCLOSE
Payload Block
Queue 에서 꺼냈을 때(PopAllMessage)
Command Block Payload Block
NetworkFacade->Create(new ProactorFactory);
NetworkFacade->AddAcceptor(ip, port, queue_id);
NetworkFacade->Open();
초기화 코드
NetworkFacade-
>SetWorkerThreadCount(count);
NetworkFacade->SetSendMode(DIRECT_SEND);
NetworkFacade-
>SetReceiveBufferLen(1024*4);
NetworkFacade->SetIntervalSendTerm(20);
설정관련 함수들
NetworkFacade->Connect(ip,port,queue_id);
NetworkFacade->SendRequest(streamID,block);
NetworkFacade->CloseStream(streamID);
NetworkFacade->PopAllMessage(block);
NetworkFacade->SuspendAcceptor(port);
NetworkFacade->ResumeAcceptor(port);
NetworkFacade->Dump();
동작관련 함수들
Packet Generator
YAML정의 파일
Packet Generator
C++소스 파일
ACE 다운로드 : http://download.dre.vanderbilt.edu/
HalfNetwork 다운로드 : https://sourceforge.net/projects/halfnetwork/
HalfNetwork 한국어 위키 : http://halfnetwork.springnote.com/
Blog : http://javawork.egloos.com/
참고
Q&A