글
Technical Article 2013. 1. 27. 00:34cpp-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
계속하려면 아무 키나 누르십시오 . . .

RECENT COMMENT