wiki:ThriftCharrenge

Thriftを使おう(C++(サーバー)とpython(クライアント)

作成:kosuke

参考: http://d.hatena.ne.jp/mzp/20080925/thrift#c http://www.itpl.co.jp/ocaml-nagoya/index.php?Thrift

動作環境:ubuntu8.04

1. thriftファイルの作成

fact.thriftというファイルを作りそこに以下を入力する。

{{{ service fact{

i32 fact(1: i32 n)

}

}}} 2. スケルトンの生成

以下のコマンドを実行して、スケルトンを作成する。

thrift --gen cpp --gen py fact.thrift

 

thrift直下に新たにgen-cppとgen-pyディレクトリができていれば成功である.

3. サーバーを書く  

とりあえず、gen-cppディレクトリに移動して、fact_server.skelton.cppを以下のように編集する。

 

 class factHandler : virtual public factIf {
   public:
    factHandler() {
     // Your initialization goes here
    }

   int32_t fact(const int32_t n) {
    // Your implementation goes here
     if(n == 0){
       return 1;
     }else{
       return n * fact(n-1);
     }
   }

 };

4. さっそくコンパイルして立ち上げる

さっそくコンパイルする。

g++ -g fact_server.skeleton.cpp fact.cpp -o fact_server -lthrift -I/usr/local/include/thrift

コンパイルするとfact_serverというバイナリファイルができているので実行する。(サーバーを立ち上げる)

./fact_server

5. クライアントを書く。

gen-pyディレクトリにfact.pyファイルを作成し以下の内容を書く。

    import thrift
    import thrift.transport.TSocket
    import thrift.protocol.TBinaryProtocol
    import fact.fact

    socket   = thrift.transport.TSocket.TSocket('localhost',9090)
    protocol = thrift.protocol.TBinaryProtocol.TBinaryProtocol(socket)
    client   = fact.fact.Client(protocol,protocol)

    socket.open()
    print client.fact(3)
    socket.close()

6. クライアントを実行する

以下のコマンドを実行する。

python fact.py

以下のような結果が表示されれば成功だ。 {{{ 6

}}}