블로그 이미지
fiadot_old

칼퇴근을 위한 게임 서버 개발 방법론에 대한 심도있는 고찰 및 성찰을 위한 블로그!

Rss feed Tistory
Technical Article 2013. 1. 27. 00:34

cpp-netlib 0.9.4 visual studio 2010 사용해보자!

왜???

클라우드, 스마트폰 => HTTP 서버, 클라이언트

결국 스케일 아웃을 위해서 Restful 방식으로 될 수 밖에!

 

- MS casandra

native C++ 을 위한 MS의 restful 지원책 => 실제로는 azure에 끌어들이기 위한것 아닌가?

공식 사이트에서도 설명했지만 production 레벨로 권고하지 않음. 아직 개발단계이니...

성능 테스트 해봤을 때 좀 실망적...

 

- Boost ASIO + custom HTTP

간단하게 짜기 좋으며 성능도 짱.

 

- Boost cpp-netlib

아직 정식 boost 배포에 포함되지는 않았지만 노력중인듯.

HTTP, URI, header 등... 필요한 건 다 있는듯

 

 

 

cpp-netlib 0.9.4 빌드 방법

 

1. Jamroot파일에서 주석처리

#build-project libs/network/test ;
#build-project libs/mime/test ;

 

2. libs/network/build/Jamfile.v2 에서 from -> to 로 변경

from: lib cppnetlib-uri : libs/network/src/uri/parse.cpp ;
to: lib cppnetlib-uri : libs/network/src/uri/uri.cpp libs/network/src/uri/schemes.cpp ;

3. boost 폴더에서 bjam 복사

 

4. 실행

cd cpp-netlib-0.9.4

 

bjam.exe -sBOOST_ROOT=C:\Dev\boost_1_52_0 toolset=msvc address-model=32 variant=debug link=static
bjam.exe -sBOOST_ROOT=C:\Dev\boost_1_52_0 toolset=msvc address-model=32 variant=release link=static
bjam.exe -sBOOST_ROOT=C:\Dev\boost_1_52_0 toolset=msvc address-model=64 variant=debug link=static
bjam.exe -sBOOST_ROOT=C:\Dev\boost_1_52_0 toolset=msvc address-model=64 variant=release link=static

 

5. 빌드 후 라이브러리 파일 경로

cpp-netlib-0.9.4\libs\network\build\bin

 

* 파일명이 빌드타입이나 비트에 따라 별도로 생성 안 됨 ㅡㅡ;

 

 

참조  : https://groups.google.com/forum/?fromgroups#!topic/cpp-netlib/HCahOzmLe54

 

 

 

샘플 테스트

 

 

서버> node.js

var cluster = require('cluster');

var numCPUs = require('os').cpus().length;
// var numCPUs = 1;

if ( cluster.isMaster )
{   
 for (var i = 0; i < numCPUs; i++) {
  cluster.fork();  
 }   
 
 cluster.on('death', function(worker)  {   
  logger.info('worker ' + worker.pid + ' died & restart');
  cluster.fork();                   
 }); 
}
else
{
 var sys = require("sys"),
 my_http = require("http");
 my_http.createServer(function(request,response){ 
  response.writeHeader(200, {"Content-Type": "text/plain"});
  response.write("Hello World");
  response.end();
 }).listen(80);
 sys.puts("Server Running on 80"); 
}

 

 

샘플>
#include <boost/network/protocol/http/client.hpp>
#include <iostream>

#pragma comment(lib, "libcppnetlib-client-connections.lib")
#pragma comment(lib, "libcppnetlib-server-parsers.lib")
#pragma comment(lib, "libcppnetlib-uri.lib")


int _tmain(int argc, _TCHAR* argv[])
{
 using namespace boost::network;
 /*
 if (argc != 2) {
  std::cout << "Usage: " << argv[0] << " [url]" << std::endl;
  return 1;
 }
 */

 char* uri = "http://127.0.0.1";

 http::client client;
// http::client::request request(argv[1]);
 http::client::request request(uri);
 request << header("Connection", "close");
 http::client::response response = client.get(request);
 std::cout << body(response) << std::endl;

 return 0;
}

 

 

결과>

b
Hello World
0


계속하려면 아무 키나 누르십시오 . . .

 

 

,
TOTAL TODAY