21
OpenSource Network Library HalfNetwork 임임임 [email protected]

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

Embed Size (px)

Citation preview

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

OpenSource Network Li-brary HalfNetwork

임영기[email protected]

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

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

HalfNetwork 란

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

Open source object-oriented framework Socket / Thread / Lock / Buffer 여러 패턴의 집약체

◦ Wrapper Façade ◦ Adaptor◦ Composite

ACE

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

$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 컴파일

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

Half-Sync / Half-Async Pattern

Queue

Library

Application

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

MessageBlock

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

Message_Block 의 기능 #1 버퍼 관리

ReadPtr

WritePtr

Size

Size = block.size(); // SizeLength = block.length(); // WritePtr – ReadPtrSpace = block.space(); // Size – WritePtr

0

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

memcpy(buffer, block.rd_ptr(), block.length());

block.rd_ptr(block.length());

Block 에서 읽어오기

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

Block 에 쓰기

block.copy(buffer, write_length);

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

Message_Block 의 기능 #2Chained Message_Block

Block

Next

• Head 만 넘기면 됨• 데이터 복사를 줄여준다• Composite 패턴

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

Queue 에서 꺼냈을 때(PopMessage)

Command Block Payload Block

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

•CONNECT•ACCEPT

ESTAB-LISH

•RECEIVEREAD

•CLOSECLOSE

Command Block

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

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;}

패킷 처리 코드

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

•IPESTAB-LISH

•Recv DataREAD

•IPCLOSE

Payload Block

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

Queue 에서 꺼냈을 때(PopAllMessage)

Command Block Payload Block

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

NetworkFacade->Create(new ProactorFactory);

NetworkFacade->AddAcceptor(ip, port, queue_id);

NetworkFacade->Open();

초기화 코드

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

NetworkFacade-

>SetWorkerThreadCount(count);

NetworkFacade->SetSendMode(DIRECT_SEND);

NetworkFacade-

>SetReceiveBufferLen(1024*4);

NetworkFacade->SetIntervalSendTerm(20);

설정관련 함수들

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

NetworkFacade->Connect(ip,port,queue_id);

NetworkFacade->SendRequest(streamID,block);

NetworkFacade->CloseStream(streamID);

NetworkFacade->PopAllMessage(block);

NetworkFacade->SuspendAcceptor(port);

NetworkFacade->ResumeAcceptor(port);

NetworkFacade->Dump();

동작관련 함수들

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

Packet Generator

YAML정의 파일

Packet Generator

C++소스 파일

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

ACE 다운로드 : http://download.dre.vanderbilt.edu/

HalfNetwork 다운로드 : https://sourceforge.net/projects/halfnetwork/

HalfNetwork 한국어 위키 : http://halfnetwork.springnote.com/

Blog : http://javawork.egloos.com/

참고

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

Q&A