PopAllMessage를 호출하여 받는 메시지 블록을 호출할 때마다 동적 생성하지 않고 미리 메모리 풀을 만들어서 재사용할 수 있습니다.

 

메모리 블록의 풀의 크기와 개수는 아래의 함수로 설정합니다.

 

void PrepareMemoryBlock( const size_t bufferSize, const uint32 count );

// 64 byte짜리 청크를 100개 미리 할당
PrepareMemoryBlock(64, 100);



그런데 서버 실행 중 64보다 큰 200 바이트 크기의 메시지 블록이 필요하게 되면 풀에서는 200 바이트로 재할당 합니다( 정확하게는 100 이라고 설정하면 128, 200 이라면 256 바이트 청크를 만듭니다 ).

 

또 미리 할당한 청크를 다 사용하였다면 앞에 할당한 개수의 2배로 재할당 합니다.

 

 

저작자 표시
신고
by 흥배 2010.02.08 09:00

PopAllMessage 호출 시 세 번째 파라미터를 -1이 아닌 값을 설정하였다면 서버가 종료할 때 설정한 값이 지난 후 스레드가 깨어난 후 스레드가 종료됩니다.

 

그러나 -1로 설정했다면 무한 대기에 빠집니다. 서버 종료 시에 무한 대기에 빠지지 않기 위해서는 서버 종료 시에

NetworkInstance->Pulse();

을 호출하여 스레드를 깨워야 서버를 정상적으로 종료할 수 있습니다.

저작자 표시
신고
by 흥배 2010.02.04 09:00

0.60 버전에서 추가된 기능으로 설정파일을 읽을 수 있습니다.



설정파일 이름

const wchar_t CONFIG_FILE_NAME[] = L"TestClientConfig.txt";

 

설정 파일에 있는 내용

server_port=15001;

client_port=25001;

workerthread=0;

receivebufferlength=2048;

updateterm=20;

 

server_receive_buff_size=65536;

client_receive_buff_size=4096;

 

client_init_accept_count=126;

 

 

사용


SimpleConfig configReader;

 

if( false == configReader.ReadFile( CONFIG_FILE_NAME ) )

{

        return false;

}

 

HalfNetwork::SystemConfig config;

config.Worker_Thread_Count = configReader.GetValue<unsigned char>(ACE_TEXT("workerthread"));



 
저작자 표시
신고
by 흥배 2010.02.03 09:00

네트웍을 통해서 받은 데이터를 담을 버퍼의 크기를 설정하는 방법은 두 가지가 있습니다.

하나는 SystemConfig 객체 사용하는 것 , 또 다른 하나는 Acceptor를 설정할 때 파리미터로 버퍼의 크기를 설정합니다.




1. SystemConfig


HalfNetwork::SystemConfig config;

config.Receive_Buffer_Len = 1024;

 

 

2. Acceptor에서 설정

NetworkInstance->AddAcceptor( NULL, 6555, CLIENT_QUEUE_ID, 2048, ClientInitAcceptCount ))

                                



주의해야 할 점은 1번에서 설정한 후 2번을 통해서 또 설정하는 경우 2번으로 설정한 것을 우선 시 합니다.
저작자 표시
신고
by 흥배 2010.02.01 09:00
출처 : http://halfnetwork.springnote.com/pages/2899720

  • 2009-11-20 : 0.6.0 Version Release 예정. svn에는 upload 되었습니다.
  • GCC 지원

    • Linux에서 빌드
    • 현재 ubuntu 9.04 32비트, gcc 4.3.3에서 테스트 되었습니다.
  • 64비트 지원
  • ACE 소스 내부 포함 : 5.7.0 버젼을 내부에 포함하여 ace 라이브러리를 따로 링크하지 않아도 됩니다.
  • Testcase에 ACE_TEST_ASSERT 사용 : unitetst++ 없어도 testcase 실행이 가능합니다
  • MemoryPool 제공 : MemoryObject를 상속 받으면 됩니다.
  • Key:Value 형태의 간단한 설정파일 Reader : SimpleConfig

    • port=25251;
    • workerthread=2;
  • Proactor 초기 accept 개수 지정 가능 : AddAcceptor 메소드의 5번째 인자
  • 가변 사이즈 MessageBlockPool 제공 : AllocateBlock 메소드
  • MessageBlockPool와 MemoryPool의 정적 할당 가능 : PrepareMessageBlock, PrepareMemoryBlock 메소드
  • Port마다 receive buffer size 다르게 설정 기능 : AddAcceptor 메소드의 4번째 인자, Connect의 4번째 인자
  • PopMessage(PopAllMessage) 함수 대기시간 버그 수정

    • 대기 시간을 -1 이외의 값으로 주면 데이터가 없을 경우 그 시간동안(밀리세컨드) 대기해야 하는데 그렇게 되지 않았습니다.

저작자 표시
신고
by 흥배 2009.11.24 08:30

HalfNetWork를 64비트로 빌드하기


작성자 : 최흥배 ( jacking75@gmail.com )



이번 주 토요일(5월30일) 업데이트에 64비트 빌드가 추가 되었습니다.

HalfNetwork를 64비트로 빌드하는 방법은 아래의 순서대로 하면 됩니다.


1. Visual Studio 2008(VS 2008) 및 64비트 컴파일러 설치

이번에 추가된 64비트 빌드 구성은 VS 2008 프로젝트 솔루션에만 추가했습니다. 그래서 VS 2008에서만 64비트 빌드를 선택할 수 있습니다.

2008 만든 이유는 VS 2008 64비트 빌드 지원이 2005에 비해 더 좋고, 현재 제가 사용하는 버전이 2008이기 때문입니다. ^^;;

2005 버전보다는 2008 버전을 사용하는 사람이 계속 늘어날 테니 앞으로도 2005에서는 64비트 빌드 구성을 추가할 예정이 없습니다.

(만약 2005에서 64비트 빌드를 해야 되는 분들은 독자적으로 하시면 됩니다. 방법은 간단합니다)



2. 64비트 구성 선택

디버그 버전은 Debug64, 릴리즈 버전은 Release64를 선택하면 됩니다.




3. 빌드

빌드를 하면 각각 HalfNetworkLib64_D.lib 와 HalfNetworkLib64_R.lib 이 생성됩니다.



4. ProactorServer를 64비트로 빌드 하기

HalfNetwork을 사용한 샘플 프로젝트 중 ProactorServer는 64비트 빌드를 할 수 있게 기능이 추가 되었습니다.


먼저 이것을 64비트로 빌드하기 위해서는 사전에 ACE와 HalfNetwork 라이브러리를 64비트로 빌드해 놓아야 합니다.


프로젝트 구성에서 Debug64나 Release64를 선택한 후 빌드하면 됩니다.


main.cpp에는 32비트와 64비트 빌드에서 사용할 각각의 ACE 라이브러리를 사용하도록 프리프로세스로 구분하고 있습니다.

64비트 구성에서는 __64BIT가 선언되어 있습니다. 64비트로 빌드하여 생성되는 프로그램 파일의 이름은 뒤에 64가 붙어 있습니다.




< 참고 >

ProactorServer 프로젝트의 경우 HalfNetwork 솔루션 속성의 프로젝트 종속성 설정에 의해 명시적으로 HalfNetworkLib을 포함하지 않아도 사용할 수 있습니다. 만약 새로운 프로젝트를 만들어서 HalfNetworkLib을 사용하는 경우 명시적으로 선언해야 합니다.


프로젝트 설정이 아닌 코드에 넣는다면 아래와 같이 합니다.

#ifdef _DEBUG
     #pragma comment(lib, "acesd")
   
     #pragma comment(lib, "HalfNetworkLib_d")
#else
     #pragma comment(lib, "aces")
    
#pragma comment(lib, "HalfNetworkLib_r")
#endif





저작자 표시
신고
by 흥배 2009.06.01 06:00

ACE 빌드 -Step By Step


작성자 : 최흥배 ( jacking75@gmail.com )

                                     


임영기님이 작성한 ACE 빌드 방법을 토대로 스크린 샷과 함께 좀 더 쉽게 설명하려고 합니다.

또 마지막에 64비트 빌드 방법도 추가했습니다.



1. ACE 다운로드

http://download.dre.vanderbilt.edu/  에서 다운로드 합니다.



이 중 ACE만 필요로 하면 가장 아래의 ACE.zip을 다운로드 합니다.



2. 압축 풀기

다운로드 받은 파일의 압축을 풉니다. 압축을 풀면 ACE_wrappers 라는 폴더가 만들어집니다.

ACE_wrappers 폴더를 $ACE_ROOT 라고 부릅니다.


저는 C:\projects\CommonLib 폴더에 ACE.zip을 다운 받은 후 압축을 풀어서 ACE_wrappers 폴더의 총 path는 C:\projects\CommonLib\ACE_wrappers 가 되었습니다.



3. config.h 파일 생성

ACE를 다운 받고 압축을 푼 후 빌드 하기 전에 confih.h 파일을 만들어야 합니다.

$ACE_ROOT/ace 폴더에 만듭니다.



config.h에 필요로 하는 것을 설정합니다. 보통은 아래의 3줄만을 사용해도 됩니다.

  1. #define ACE_HAS_STANDARD_Cpp_LIBRARY 1  // STL 사용
  2. #define ACE_HAS_UNICODE 1                                 // 유니코드 사용
  3. #include "ace/config-win32.h"



4. Visual Studio에서 빌드

Static 라이브러리를 빌드하는 방법만 예를 들겠습니다.

Visual Studio 2005를 사용하는 사람은 $ACE_ROOT/ace/ 폴더에 있는 ace_vc8_Static.sln,

Visual Studio 2008를 사용하는 사람은 $ACE_ROOT/ace/ 폴더에 있는 ace_vc9_Static.sln를 클릭합니다.



저는 VS2008을 사용하므로 ace_vc9_Static.sln을 클릭했습니다.


속성 페이지를 열어서 구성 속성’ – ‘일반에서 문자 집합 유니 코드 문자 집합 사용으로 선택합니다.



빌드를 하면 $ACE_ROOT/lib 폴더에 ACEs.lib(릴리즈) / ACEsd.lib(디버그) 두 개의 라이브러리 파일이 생성됩니다



5. Visual Studio의 옵션에서 프로젝트 및 솔루션 설정

메뉴의 도구’ – ‘옵션을 클릭합니다.

프로젝트 및 솔루션’ – ‘VC++ 디렉토리에서

포함 파일 디렉토리에 $ACE_ROOT 폴더를 등록합니다.


이어서 ‘라이브러리 디렉토리에 $ACE_ROOT\lib 을 등록합니다.



이것으로 ACE 빌드는 끝입니다.^^

32비트로만 빌드 하실 분들은 이 아래의 글을 보지 않아도 됩니다.



6. 64비트 버전으로 빌드

64비트 빌드를 하기 위해서는 Visual Stuido에 64비트 컴파일러가 설치되어야 합니다. 보통 기본으로는 설치하지 않으니 Visual Studio를 설치할 때 설치항목 선택에서 64비트 부분이 선택 되었는지 확인하세요.


64비트 빌드를 위해서 64비트 용 솔루션 구성을 추가합니다.

메뉴의 빌드에서 구성 관리자를 선택합니다.



왼쪽 상단의 활성 솔루션 구성에서 새로 만들기를 선택합니다.



64비트 릴리즈 버전 구성을 추가하는 경우 아래 그림처럼 합니다( 새로 추가하는 이유는 기존의 32비트 빌드 구성은 그대로 유지해 놓기 위해서입니다.



오른쪽 상단의 활성 솔루션 플랫폼에서 새로 만들기를 선택합니다.



새 플랫폼 입력 또는 선택 에서 x64 선택합니다.



기존에 생성되는 32비트 라이브러리 파일과 겹치지 않도록 솔루션 속성에서 라이브러리 이름을 변경합니다. 저는 기존 이름의 뒤에 64를 붙입니다.


이 후 이 프로젝트 구성으로 빌드하면 64비트 용 라이브러리가 생성됩니다.

저작자 표시
신고
by 흥배 2009.05.31 15:38
| 1 |