cobonas

2013.06.03

Facebookが開発したRPCフレームワーク「Thrift」入門

こんにちは。伊藤です。

今回はFacebookが開発したRPCフレームワークであるThriftについて書きます。
Thriftとは?
 http://ja.wikipedia.org/wiki/Apache_Thrift
つまりこれを使うと、Server側はJavaで開発、クライアント側はPHPで開発といった事が簡単にできるワケです。

今回はServer側をJava、クライアント側をPHPとして動かす方法について紹介します。

1. Thriftのインストール
弊社のt_ishidaによるこの記事を参考にどうぞ http://qiita.com/items/ca2eeb813249a9a09a58

2. .thriftファイルの作成
この辺を参考にして、.thriftファイルを作成します。
使用できる型は、bool/byte/short/int/long/double/stringの他に、Map/List/Enumも可能です。

test.thrift

3. .thriftファイルを基にソースコードを生成

まずJavaのソースコードを生成します。

このコマンドを叩く事で、gen-java配下の指定したNamespace(パッケージ)に次のファイル群が生成されます。

Enum(Enum1.java)

構造(StructTest.java)

構造(ResultTest.java)

サービスクラス(ServiceTest.java)

次にPHPのソースコードを生成します。

このコマンドを叩く事で、gen-php配下に次のファイル群が生成されます。

定義などをarrayにしたもの(test_types.php)
※ソースは割愛

サービスクラス(ServiceTest.php)
※ソースは割愛

また、PHPについてはThriftのソースコードをコピーしてきて、このような階層にしておく必要があります。
http://wiki.apache.org/thrift/ThriftUsagePhp
packagesの中に今回生成した2ファイルを配置して下さい。

さて、ここまででやっと準備が整いました。

4. サーバ側実装(Java)

Server.java

このクラスを実行して、localhostの9090ポートで待ち受け状態にしておきます。

5. クライアント側実装(PHP)

ThriftTest.php

ThriftTest.phpを実行すると、PHP側のexecuteTest1()を経由して、Server側のexecuteTest1()が呼ばれ、結果が返ってきます。この辺の呼びだしをThriftがよしなにやってくれるのです。

何かダラダラと長くなってしまいましが、このようにThriftは簡単に言語間の差を吸収してくれます。
色々と使い道がありそうですね。