多言語コラボレーションツールthriftインスタンスの説明

7453 ワード

1背景
各言語の特徴を議論すれば、各言語のプログラマーが天花乱落と話し、顔を赤くすることができると信じています.しかし、今の大インターネット時代には、銀弾という言語はなく、様々な言語に長所がある.各家の長さを切り取るために、様々な言語間通信フレームワークが現れ、thriftはその典型的な代表である.
thriftはsocketまたはhttpプロトコルに基づいて通信するので、分散型のサーバ間で通信するのに適しています.phpではメモリを常駐させることができないことはよく知られていますが、java、c、c++などでいいです.htmlページの処理についてはphpが得意で、データベース接続javaが得意で、高同時処理nodeについては.js erlangの方が得意です.thriftは各方面を結びつけて、長所を伸ばして短所を避けることができて、しかも支持する言語はさっき述べたいくつかよりはるかに多いです.
thriftの入門についてはhttp://www.javabloger.com/article/apache-thrift-architecture.html
2インストール
Javaとphpを例にthriftの使用を紹介します.
まずhttps://dist.apache.org/repos/dist/release/thrift/0.9.0/thrift-0.9.0.tar.gz最新のthriftソースとwindowsの下のツールをダウンロードしますhttps://dist.apache.org/repos/dist/release/thrift/0.9.0/thrift-0.9.0.exe.thrift-0.9.0.tar.gzは任意のディレクトリに解凍し、中にディレクトリbinを新規作成し、thrift-0.9.0.exeはこのディレクトリにコピーし、thriftと名前を変更します.exeは、このbinディレクトリを環境変数に追加し、後でコマンドラインから便利にします.
thrift解凍ディレクトリの下のlib/javaディレクトリに入り、antコマンド(antの構成については、自分で検索してください.もちろん、その後に与えるant生成物をダウンロードすることもできます)を実行し、生成するbuildディレクトリのlibthrift-0.9.0.JArとbuild/libディレクトリのすべてのjarパッケージがバックアップされ、javaプロジェクトの作成時に参照できます.
phpはapcサポートを構成する必要があります.インストールがないとパフォーマンスに影響を与える場合は、先にインストールしてください(構成手順は付録を参照).
3スクリプト作成
新しいthriftデータ定義ファイルtest.txtの内容は以下の通りです.
namespace java com.whyun.thrift   #   1              ,       package   。
namespace php test

struct Blog {   #    2.1              ,         pojo get/set
    1: string topic     #    2.2           Thrift wiki   
    2: binary content  
    3: i64    createdTime
    4: string id
    5: string ipAddress
    6: map<string,string> props
  }
service ThriftCase {  #    3           ,                 ThriftCase.Iface  
    i32 testCase1(1:i32 num1, 2:i32 num2, 3:string  num3) #  4.1            ,      wiki
    list<string> testCase2(1:map<string,string>  num1)
    void testCase3()
    void testCase4(1:list<Blog> blog)   #    4.2   list  thrift           ,list    Blog     struct    
}

testでtxtが存在するディレクトリの下でthrift--gen java testを実行します.txtはjavaコードを生成し、thrift--gen php testを実行する.txtはphpコードを生成し、実行が完了すると、現在のディレクトリの下にgen-javaとgen-phpの2つのディレクトリが生成されます.
4 javaコード作成
Javaプロジェクトthrift-demoを新規作成し、プロジェクトにディレクトリlibを新規作成し、先ほどインストールしたjarパッケージをすべてコピーしclasspathに追加し、以前に生成したgen-javaディレクトリの下で生成するコードをプロジェクトにコピーし、パッケージcomを新規作成する.whyun.thrift.ビジネスは私たちの処理コードを作成し、まずseviceの処理クラスを実現します.以下のようにします.
package com.whyun.thrift.business;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.apache.thrift.TException;

import com.whyun.thrift.Blog;
import com.whyun.thrift.ThriftCase.Iface;

public class CaseImpl implements Iface {

	@Override
	public int testCase1(int num1, int num2, String num3) throws TException {
		// TODO Auto-generated method stub
		return 1;
	}

	@Override
	public List<String> testCase2(Map<String, String> num1) throws TException {
		List<String> list = new ArrayList<String>();
		list.add("aaa");
		list.add("bbb");
		return list;
	}

	@Override
	public void testCase3() throws TException {
		System.out.println("testCase3");		
	}

	@Override
	public void testCase4(List<Blog> blog) throws TException {
		System.out.println("testCase4");		
	}
}

コードフラグメント4.1
次にserverエンドプログラムを作成します.
package com.whyun.thrift.business;

import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.protocol.TBinaryProtocol.Factory;
import org.apache.thrift.server.TServer;
import org.apache.thrift.server.TThreadPoolServer;
import org.apache.thrift.server.TThreadPoolServer.Args;
import org.apache.thrift.transport.TServerSocket;
import org.apache.thrift.transport.TTransportException;

import com.whyun.thrift.ThriftCase;
import com.whyun.thrift.ThriftCase.Processor;

public class Server {
   public void startServer() {
       try {

           TServerSocket serverTransport = new TServerSocket(1234);

           ThriftCase.Processor process = new Processor(new CaseImpl());

           Factory portFactory = new TBinaryProtocol.Factory(true, true);

           Args args = new Args(serverTransport);
           args.processor(process);
           args.protocolFactory(portFactory);

           TServer server = new TThreadPoolServer(args);
           server.serve();
       } catch (TTransportException e) {
           e.printStackTrace();
       }
   }

   public static void main(String[] args) {
       Server server = new Server();
       server.startServer();

   }
}

コードクリップ4.2
5 phpプログラム作成
apacheのwebルートディレクトリにフォルダthriftを新規作成し、その下にclassesディレクトリを新規作成します.インストール手順でthrift解凍ディレクトリの下のlib/php/libディレクトリの下のThriftフォルダを新しいclassesディレクトリにコピーし、スクリプト作成手順でgen-phpディレクトリの下のtestフォルダをclassesディレクトリにコピーし、testフォルダの下のThriftCaseを作成する.phpはThriftCaseClientと改名した.php、最終的に形成されたディレクトリ構造は以下の通りである.
図5.1
thriftディレクトリの下にpackageを新規作成します.php、コードは以下の通りです.
<?php
use Thrift\Transport\TSocket as TSocket;
use Thrift\Transport\TBufferedTransport as TBufferedTransport;
use Thrift\Protocol\TBinaryProtocol as TBinaryProtocol;

use test\ThriftCaseClient as ThriftCaseClient;

// autoload function
function __autoload($class) {
	// convert namespace to full file path
	$class = 'classes/'.str_replace('\\', '/', $class). '.php';
	require_once($class);
}

$thriftHost = '127.0.0.1'; //Thrift     IP
$thriftPort = 1234;//Thrift       

$socket = new TSocket($thriftHost, $thriftPort);

$socket->setSendTimeout(10000);
$socket->setRecvTimeout(20000);
$transport = new TBufferedTransport($socket);
$protocol = new TBinaryProtocol($transport);
$client = new ThriftCaseClient($protocol);
$transport->open();
$socket->setDebug(TRUE);

echo $client->testCase1(1,2,3).'<br />';
var_dump( $client->testCase2(array('xxx'=>'1','ddd'=>'2')));
?>

コードクリップ5.1
6運転
eclipseでコードクリップ4.2を実行し、ブラウザでコードクリップ5.1を実行すると、出力されます(これらの出力は、コードクリップ4.1に勝手に書かれているためです):
1
array(2) { [0]=> string(3) "aaa" [1]=> string(3) "bbb" }

以上のjavaとphpコードはcsdnにアップロードされましたhttp://download.csdn.net/detail/yunnysunny/5097464.
付録APC構成
phpはthriftを使用する場合にAPCを構成する必要があるので、ここで簡単に説明します.まずphpinfo()関数を実行し、APCの構成情報がなければ、以前にインストールされていなかったことを説明し、Zend Extension Buildの内容を検索し、API 220090626、TS、VC 9のように表示されると、現在のphpがスレッドセキュリティバージョンであることを示し、中のTSがNTSに変換されると非スレッドセキュリティバージョンであることを示す.そして行くhttp://downloads.php.net/pierre/対応するバージョンをダウンロードし、スレッドセキュリティバージョンであればapc-igbinary-fastlz-snap 2010301-5.3-ts-vc 9-x 86をダウンロードすることができる.zip.
zipファイルを解き、中のdllをphpディレクトリのextディレクトリの下に置きます.phpを変更します.iniは、以下の構成[apc]extension="php_apc.dll"apcを追加する.enabled=1 apc.shm_segments=1 apc.shm_size=48M apc.ttl=7200 apc.user_ttl=7200 apc.num_files_hint=1024 apc.mmap_file_mask=d:/tmp/apc.map apc.enable_cli=1
構成オプションは、「」を参照してください.http://www.php.net/manual/zh/apc.configuration.php.注意新しいバージョンのapcはapcのメモリ占有サイズの構成項目の後ろにMあるいはGを持って、MBあるいはGBを代表することを要求して、さもなくばapacheは起動する時崩壊して、phpのエラーログはapcを提示します.shm_size now uses M/G suffixes .
インストールが完了したら、phpinfoを1回実行すると、APCの構成情報が表示されます.