2014年11月14日金曜日

proxygenビルド

今話題のproxygenをビルドしてみました。

ちなみに、proxygenってのは、たとえばSourceForgeの記事によれば
米Facebookは11月5日、C++向けのHTTPライブラリ「Proxygen」を発表した。サーバーやクライアント向けコードが含まれており、HTTPを利用したC++プログラムのやりとりを改善し、HTTPを利用するアプリケーションの構築を容易にするという。
Proxygenは、HTTPライブラリとシンプルなWebサーバーを組み合わせたソフトウェアフレームワークで、Facebook社内においてHTTPサーバーやプロキシ、クライアントなどを構築する際に利用されている。Proxygenの公開の目的として、高性能なHTTPサービスの開発と実装を支援するとしている。サーバーとクライアントコードを含み、既存のアプリケーションと容易に統合できる高性能のHTTPフレームワークを目指しているという。
という、素敵なサムシング なわけです。GitHubで公開されているソースコードをざっと見たところ、綺麗な構造で、期待が高まります。

で、ビルドです。基本的にhttps://github.com/facebook/proxygenに書いてあるのに従えばOK。ubuntu環境を用意するところから始めました。"Support for Mac OSX is incomplete."とか書いてありますけど、依存するfollyやらfbthriftやらをどうやって用意するんだ、という問題があるので、まあ、現時点ではちと難しいんではないでしょうか(homebrewでfolly入れてみなよ、みたいなことがGoogle Groupの方で書かれていましたが…)。

1. OSインストール編

1-1. まず、VMware Fusion 6でインスタンスを作りました。ubuntu 64ビット用テンプレートを使って 、ディスク20GB、メモリ2560MB(2.5GB)、1 CPU(古いiMacなもんで)でセットアップ。なお、メモリは最低2GB必要とのこと。
1-2. http://www.ubuntu.com/download/desktop からubuntu 14.04.01 desktopのisoファイルをダウンロード。14.04.xxだったら何でもいいんじゃないでしょうかね。
1-3. ダウンロードしてきたisoファイルをVMゲストの光学ドライブに接続して起動。言われるがままにインストール。OSのアップデート、再起動など勧められるがままに従う。

2. ubuntu上での準備編

$ sudo apt-get install git
$ mkdir git && cd git
$ git clone https://github.com/facebook/proxygen.git

3. ライブラリビルド編

$ cd proxygen
$ export SRC_HEAD=`pwd`   ##これ、後で使う。
$ cd proxygen
$ ./deps.sh

4. サンプルサーバビルド編

$ cd httpserver/samples/echo
$ g++ -std=c++11 -o my_echo EchoServer.cpp EchoHandler.cpp -lproxygenhttpserver -lfolly -lglog -lgflags -pthread -I$SRC_HEAD -I$SRC_HEAD/proxygen/fbthrift/thrift/folly -I$SRC_HEAD/proxygen/fbthrift -L$SRC_HEAD/proxygen/httpserver/.libs -L$SRC_HEAD/proxygen/fbthrift/thrift/folly/folly/.libs

## https://github.com/facebook/proxygenに書いてあるまんま(g++ -std=c++11 -o my_echo EchoServer.cpp EchoHandler.cpp -lproxygenhttpserver -lfolly -lglog -lgflags -pthread)だとエラーが出るので、-Iと-Lを指定。

5. サンプルサーバ動作確認編

$ sudo apt-get install curl
$ curl -v http://localhost:11000/
* Hostname was NOT found in DNS cache
*   Trying 127.0.0.1...
* Connected to localhost (127.0.0.1) port 11000 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.35.0
> Host: localhost:11000
> Accept: */*
> 
< HTTP/1.1 200 OK
< Request-Number: 1
< Date: Fri, 14 Nov 2014 13:13:31 GMT
< Connection: keep-alive
< Content-Length: 0
< 
* Connection #0 to host localhost left intact

以上。何も戸惑う箇所はありません。ライブラリのビルドに時間がかかるものの、手間もかかりません。

そして、気になるHTTP/2。
Proxygen: Facebook's C++ HTTP LibrariesThis project comprises the core C++ HTTP abstractions used at Facebook. Internally, it is used as the basis for building many HTTP servers, proxies, and clients. This release focuses on the common HTTP abstractions and our simple HTTPServer framework. Future releases will provide simple client APIs as well. The framework supports HTTP/1.1, SPDY/3, and SPDY/3.1. HTTP/2 support is in progress. The goal is to provide a simple, performant, and modern C++ HTTP library.
FacebookがHTTP/2対応版を出してくるのを 待つか(それって、でも、来年2月とかになるのかな)、独自にSPDY用のコードをごにょごにょしてHTTP/2対応させてみるか…。はてさて。

0 件のコメント:

コメントを投稿