개인적으로 boost보다는 ACE를 더 선호 합니다.


개인적으로 boost도 훌륭한 라이브러리라고 생각하지만 너무 심각하게 메타프로그래밍이라.. 

자칫 처음 쓰는 사람들에게는 어렵게 느껴질수 있습니다.

거기에다 ACE에서는 꽤나 실용적인 로직들이 많이 존재합니다.


어차피 gethostbyname으로  도메인의 아이피를 얻을때  해당 도메인에 속해 있는 모든 아이피 목록을 가져 오는 경우는 드뭅니다. 

해당 도메인에 아이피가 하나만 걸려 있거나, 여러개 걸려 있어도 로드밸런싱을 위해 당장 필요한 아이피  하나만 가져와서 씁니다.

 ACE_INET_Addr  google_addr;

 google_addr.set( 80, "google.com");

 strcpy(szServerIP, google_addr.get_host_addr());

참 단순한 로직입니다. 3줄이면 간단하게 아이피를 가져옵니다. 3줄도 많다구요?


 ACE_INET_Addr  google_addr( 80, "google.com");

 strcpy(szServerIP, google_addr.get_host_addr());

더 짧게 하면 두 줄 이군요...


거기다  내부 로직을 살펴 보면 gethostbyname을 쓰지 않고 gethostbyname_r을 사용하고 있습니다. 

즉 Thread Safe하다는 것이죠!



'C++ > ACE' 카테고리의 다른 글

플랫폼 독립적인 설정파일 로딩 로직  (0) 2014.09.16
ACE_dev_pool_reactor 쓰레드 안정성에 대해  (0) 2014.09.16

리눅스 계열이든 윈도우 계열이든 서버 모듈을 개발시  설정 문서에서 값을 읽어오는 건 필수적이다.

윈도우에서 가장 쉽게 쓸수 있는 GetPrivateProfileString는 윈도우에서만 사용을 할 수 있다.

다음 ACE 라이브러리 함수를 사용하면  리눅스든 윈도우든 똑같이 작동을 한다.

 

물론 윈도우에서만 개발 하는 사람들은  소스가 많이 길어지니 불편할듯... 하다.

리눅스 개발자는 이거라도 해주면 고마워 한다..

 

 

#include <ace/OS.h>
#include <ace/Configuration.h>
#include <ace/Configuration_Import_Export.h>

 

int ACE_TMAIN()
{        ACE_Configuration_Heap config ;

        if(config.open() == -1)
        {
                ACE_ERROR_RETURN((LM_ERROR, ACE_TEXT("config open error\n")), -1) ;
        }
               
        ACE_Ini_ImpExp config_importer(config) ;

       
        if(config_importer.import_config("as.conf")== -1)
        {
                ACE_ERROR_RETURN((LM_ERROR, ACE_TEXT("not found conf file\n")), -1) ;
        }
               
       
        ACE_Configuration_Section_Key secion ;
        if(config.open_section(config.root_section(), ACE_TEXT("CONF"), 0, secion) == -1 )
        {
                ACE_ERROR_RETURN((LM_ERROR, ACE_TEXT("secion open error\n")), -1) ;
        }
               
        ACE_TString strData ;

        if(config.get_string_value(secion, ACE_TEXT("result"), strData) == -1  )
        {
                ACE_ERROR_RETURN((LM_ERROR, ACE_TEXT("Get String Value Error\n")), -1) ;
        }                                 
               
       
        printf("%s\n", strData.c_str());
                
        config.remove_section(config.root_section(), ACE_TEXT("CONF"), 0) ;
                
        return 0 ;
}

 

 

 

 

그럼 프로그램에서 읽어들이는 설정 문서 파일의 이름은 as.conf 이고 안에 내용은 다음과 같다.[CONF]
result=  reading conf

 

 

 

결과적으로  프로그램 실행을 했을시 콘솔에 찍히는 내용은 다음과 같다.

 

 reading conf

'C++ > ACE' 카테고리의 다른 글

초간단 도메인으로 IP 주소 얻기  (0) 2014.09.16
ACE_dev_pool_reactor 쓰레드 안정성에 대해  (0) 2014.09.16

+ Recent posts