임영기 javawork93@gmail.com. ACE 를 이용하여 만든 C++ 네트워크 라이브러리 Half-Sync / Half-Async(POSA2) 패턴의 구현물.

Post on 03-Jan-2016

260 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

Transcript

OpenSource Network Li-brary HalfNetwork

임영기javawork93@gmail.com

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

top related