Allied ArchitectsAllied ArchitectsEngineer Blog

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

2013/06/3 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は簡単に言語間の差を吸収してくれます。
色々と使い道がありそうですね。

  • cobonas
  • プログラマ
  • 元Javaプログラマ。現在はScala/PlayでWeb開発と、SwiftでiOSアプリ開発をしています。 Unitテストとか書いてる時が一番楽しかったりします。

RELATION ENTRY

Play Framework(Play2)(Scala)のTips Part3:Akkaを使った非同期/バッチ処理(Advent Calendar 20日目)

Play Framework(Play2...

2014/12/20 Scala

この記事はアライドアーキテクツAdvent Calendar 20日目の記事です。 どうも。伊藤(係長)です。 今日は他の方に乗っ取られる事もなく無事に書くことができます。 今回はAkkaを使った非同期処理やバッチ処理についてです。 通常、非同期処理をJavaとかで書こうと思ったら、ちょっとメン...

続きを読む

Play Framework(Play2)(Scala)のTips Part2:Specs2とMockitoでテストを書く(Advent Calendar 8日目)

Play Framework(Play2...

2014/12/8 Scala

この記事はアライドアーキテクツAdvent Calendar 8日目の記事です。 どうも。謎の刺客Tarou Yamadaさんにカレンダーを乗っ取られてしまった伊藤(係長)です。 気を取り直して、今回はSpecs2とMockitoを使ったユニットテストのお話を書きます。 ■Specs2とは ...

続きを読む

cobonasの記事一覧へ

ページTOPへ