php-thrift-server ソース コード
コードは、Apache の thrift プロジェクトから直接クローンされ、github でホストされています:
http://github.com/volca/thrift
新規または変更されたコードは次のとおりです:
lib/php/
`-- src
|-- サーバー
|-- TNonblockingServer.php
| `-- TServer.php
`-- トランスポート
|-- TNonblockingServerSocket.php
|-- TNonblockingSocket.php
検索
git clone git://github.com/volca/thrift.git を使用して、php、apc、libevent 拡張機能をインストールします:
pecl install apc# PHP ソケット サーバーを実行するには、最初に libevent-devel などの libevent とその他のパッケージをインストールする必要があります。 pecl install libevent は、thrift テスト コードから独立して実行されている PHP サーバーを直接変更しました。thrift/test/php/ を参照してください。 TestNonblockingServer.php。これには、テスト ビジネス コードの実装も含まれています。
cd thrift/test/php#thrift コマンド ライン ツールを使用して PHP テスト ライブラリを生成します make#thrift サービスを開始します。これはローカル ポート 9090 をリッスンします php TestNonblockingServer.php クライアント コードも、int などのさまざまなデータ型に対して提供されます、float、string、listなどがテストされます。
php TestClient.phpパフォーマンステスト
apache + phpテスト結果testvoid()= voidtestString( "test")= "test" testbyte(1)= 1testi32(-1)= -1Testi64(-34359738368)= -34359738368TESTDOUBLE(-852.234234234)= -852.234234 1 , -3, -5}) = {"ゼロ", 1, -3, -5}testNest({1, {"ゼロ", 1, -3, -5}), 5} = {1, {"ゼロ", 1, -3, -5}, 5}testMap({0 => -10, 1 => -9, 2 => -8, 3 => -7, 4 => - 6}) = {0 => -9、2 => -7、4 => -6} , 1, 2}) = {1, 1, 1, 1, 1}testList({-2, -1, 0, 1, 2}) = {-2, -1, 0, 1, 2}testEnum( ONE) = 1testEnum(TWO) = 2testEnum(THREE) = 3testEnum(FIVE) = 5testEnum(EIGHT) = 8testTypedef(309858235082523) = 309858235082523合計時間: 41 msphp + libevent ソケット サーバーのテスト結果
testvoid()= voidtestString( "test")= "test" testbyte(1)= 1testi32(-1)= -1Testi64(-34359738368)= -34359738368TESTDOUBLE(-852.234234234)= -852.234234 1 , -3, -5}) = {"ゼロ", 1, -3, -5}testNest({1, {"ゼロ", 1, -3, -5}), 5} = {1, {"ゼロ", 1, -3, -5}, 5}testMap({0 => -10, 1 => -9, 2 => -8, 3 => -7, 4 => - 6}) = {0 => -9、2 => -7、4 => -6} , 1, 2}) = {1, 1, 1, 1, 1}testList({-2, -1, 0, 1, 2}) = {-2, -1, 0, 1, 2}testEnum( ONE) = 1testEnum(TWO) = 2testEnum(THREE) = 3testEnum(FIVE) = 5testEnum(EIGHT) = 8testTypedef(309858235082523) = 309858235082523合計時間: 8 ミリ秒 このテストでは、長時間のリクエストはなく、処理ロジックは次のとおりです。 php ソケットサーバーの消費時間は、Apache + php のわずか 5 分の 1 です。
倹約とは何ですか?
Thrift は、Facebook によって開発されたソフトウェア ライブラリと一連のコード生成ツールで構成されています。目的は、ソフトウェア開発をスピードアップし、効率的でスケーラブルなバックエンド サービスを可能にすることです。主な目標は、異なるプログラミング言語間で効率的かつ信頼性の高い通信を実現することです。そのためには、異なる言語間の共通層を抽象化し、この共通層を異なる言語で実装する必要があります。ここで、Thrift を使用すると、開発者はデータ型とサービス インターフェイス (中立言語ファイルで定義) を定義し、このファイルを使用して RPC クライアントとサーバーの構築に必要なコードを生成できることに注意してください。
そのメカニズムを簡単に分析すると、Thrift は C/S モードを実装し、コード生成ツールを通じてインターフェイス定義ファイルからサーバー側とクライアント側のコード (異なる言語でも可能) を生成し、それによってサーバーのクロス言語サポートを実現します。そしてクライアント。
Thrift はトランスポート層とプロトコル層に分けることができます:
プロトコル層は、バイナリ ストリームまたは XML の形式でデータ送信形式を定義します。
サーバーがソケット プロトコルを使用する場合、シンプル|スレッドプール|スレッド|ノンブロッキングおよびその他のメソッドで実行して、パフォーマンスを向上させることができます。