RPC フレームワークとは何ですか? RPC を「リモート プロシージャ コール」という一文で要約できる場合、リモート コールとは何でしょうか?通常、次の関数メソッド localAdd(10, 20) などの PHP のメソッドを呼び出します。 localAdd メソッドの特定の実装は、ユーザーによって定義されるか、PHP ライブラリ関数、つまり localAdd メソッドに付属します。コードはローカルに実装されており、ローカル呼び出しです。リモート呼び出しとは、呼び出されるメソッドの特定の実装が、プログラムが実行されている場所ではなく、他のリモートの場所にあることを意味します。
たとえば、A (クライアント) は、B (サーバー) によって提供される RemoteAdd メソッドを呼び出します。呼び出す必要があるメソッドの名前 (ここでは、remoteAdd) とメソッドのパラメーター (10、20) をバイト ストリームにシリアル化して送信します。
B は、A によって送信されたバイト ストリームを受け入れ、それを逆シリアル化して取得します。ターゲットのメソッド名とメソッドのパラメータを取得し、対応するメソッド呼び出し (おそらく localAdd) を実行し、結果 30 を返します。
A はリモート呼び出しの結果を受け入れ、30 を出力します。
RPC フレームワークは、先ほど述べた詳細をカプセル化し、ユーザーにシンプルでフレンドリーな API の使用を提供します。
分離: サーバーがメソッドを変更する必要がある場合、クライアントはまったく意識せず、変更を加える必要がありません。このメソッドは部門間および会社間の協力でよく使用されます。メソッド 通常呼ばれるプロバイダー: 公開されるサービス。
上記の簡単な説明を通して、RPC と Socket は似ているように見えます。これらはすべてリモート メソッドを呼び出し、すべてクライアント/サーバー モードです。私も以前に記事を書きました: では、それらの違いは何ですか?
RPC と REST の違いは何ですか?
REST API と RPC はどちらもサーバー側のインターフェイスに関数をカプセル化し、クライアントによる呼び出しに対して公開します。ただし、REST API は http で POST/GET/PUT/ を渡すことに基づいています。 DELETE およびその他のメソッドと、http リクエストを提供するための人間が判読できる URL。 RPC は HTTP プロトコルに基づく必要がないため、2 つのバックエンド言語が相互に呼び出しを行う場合、RPC を使用した方がパフォーマンスが向上し (HTTP ヘッダーなどの一連の処理が不要になり)、より簡単になるはずです。設定します。フロントエンドが AJAX 経由でバックエンドを呼び出す場合は、REST API を使用することをお勧めします (とにかく HTTP のハードルを回避できないため)。
phpで人気のあるRPCフレームワークは何ですか
まずそれらを列挙しましょう: phprpc、yar、thrift、gRPC、swoole、hprose
時間とエネルギーは限られているため、それらを 1 つずつ学習して使用するのは不可能です。最もよく使用されるものをいくつか選択します。世界で。 。 RPC の原理は同じなので、どちらもクライアント/サーバー モードですが、それぞれのフレームワークの使用方法が異なります。
dhparams/
pecl/
- bigint.php
- compat.php
- phprpc_date.php
- xxtea.php
- dhparams.php
- phprpc_server.php
- phprpc_client.php dhpara ms と pecl がある
- インストールしたほうがいいです。結局のところ、高速な暗号化は良いことです:
はフォルダーであり、 pecl の 1 つは php です。公式 Web サイトの説明によると、xxtea 拡張機能はインストールしてもしなくても、phprpc をインストールせずに実行することもできます。ただし、より高速な暗号化処理機能が必要な場合は、それをインストールできます。
インストール手順は次のとおりです。まず、pecl の下の xxtea フォルダーを php ソース コードの etx ディレクトリにコピーします: /lamp/php-5.4.11/ext。次に、phpize を使用して拡張機能を使用して再コンパイルします。
[root@localhost /]# cd /lamp/php-5.4.11/ext/xxtea [root@localhost xxtea]# /usr/local/php/bin/phpize [root@localhost xxtea]# ./configure --enable-xxtea=shared --with-php-config=/usr/local/php/bin/php-config make && make installログイン後にコピーOK、コンパイルが完了し、xxtea.so がすでに /usr/local/php/lib/php/extensions/no-debug-zts-20100525/xxtea.so にあることが表示されます。
次に、php.ini の最後に xxtea.so を追加する必要があります:
[root@localhost /]# vi /usr/local/php/etc/php.ini [xxtea] extension=xxtea.soログイン後にコピーわかりました。追加後、Apache または php-fpm を再起動する必要があります
重启apache [root@localhost /]# /usr/local/apache/bin/apachectl restart 平滑重启php-fpm kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`ログイン後にコピーログイン後にコピー再起動後、phpinfo() ページを開いて検索すると、xxtea が表示されるはずです。
始めましょう
まず簡単な例を見てみましょう。phprpc もサーバーとクライアントに分かれています。したがって、フォルダー内の対応するファイルは phprpc_server.php と phprpc_client.php です
公式 Web サイトにあるいくつかの例を参照して実践してみましょう:
server.php サーバー側: このように書くと、最も単純な helloword インターフェイスが完成します。
<?php include ("phprpc/phprpc_server.php"); function HelloWorld() { return 'Hello World!'; } $server = new PHPRPC_Server(); $server->add('HelloWorld'); $server->start();ログイン後にコピーserver.php を実行し、消去したところ、エラーが報告されました。 ! !
PHP Strict Standards: Non-static method PHPRPC_Server::initSession().... Cannot redeclare gzdecode().....ログイン後にコピーグーグルで調べたら、まずphprpc_server.phpの413行目のinitSession()を静的関数に変更したと書いてありました
static function initSession() { **** }ログイン後にコピー追記:phprpcはどうやってリリースされたのかと、とても大きな間違いでした。 ! !
compat.phpの71行目のgzdecode()関数では、php5.4では既にこの関数が実装されています。このように関数が書き換えられてエラーが報告されるので、
if (!function_exists('gzdecode')) { //将gzdecode函数包括进来 }ログイン後にコピーOKという判定を追加します。変更を加えた後、保存します。もう一度server.phpを実行します。わかりました。もうエラーはありません。出力:
phprpc_functions="YToxOntpOjA7czo5OiJoZWxsb3dvcmQiO30=";ログイン後にコピー次にクライアント client.php を書きましょう。どのように書かれているか見てみましょう。
<?php include ("phprpc/phprpc_client.php"); $client = new PHPRPC_Client('http://127.0.0.1/server.php'); echo $client->HelloWorld(); ?>ログイン後にコピー次の client.php を実行しており、出力は期待どおりです:
Hello Word!ログイン後にコピーこのような単純なサーバー/クライアントの配信が完了しました。途中間違いもありましたが、全体的には非常にシンプルで分かりやすいです!
その他のより高度な使い方については、公式Webサイトを参照してください。
yar
yar は、中国の有名な PHP マスターである Hui Xinchen の傑作であり、Weibo の製品にも使用されています。これも RPC フレームワークです。純粋な C で書かれた PHP の拡張機能を使用しているため、効率は非常に高く、非同期並列処理をサポートしているため、非常に優れています。
ダウンロードしてインストールします
公式Webサイトからダウンロードします: http://pecl.php.net/package/yar 最新バージョンyar-1.2.4.tgz
その後、解凍してphpソースのetxディレクトリにコピーしますコード: /lamp/php-5.4 .11/ext.次に、phpize を使用して拡張機能を使用して再コンパイルします。
[root@localhost yar-1.2.4]# /usr/local/php/bin/phpize [root@localhost yar-1.2.4]# ./configure --with-php-config=/usr/local/php/bin/php-configログイン後にコピーしかし、何か問題が発生しました: プロンプト、curl に問題があります:
configure: error: Please reinstall the libcurl distribution - easy.h should be in <curl-dir>/include/curl/ログイン後にコピー私のローカルマシンでは、curl に問題があると推定されているため、yum を使用してインストールしてください:
yum -y install curl-develログイン後にコピーcurl をインストールした後、続行しますコンパイルしてインストールすると、問題はありません:
[root@localhost yar-1.2.4]# /usr/local/php/bin/phpize [root@localhost yar-1.2.4]# ./configure --with-php-config=/usr/local/php/bin/php-config [root@localhost yar-1.2.4]# make && make installログイン後にコピー成功すると、yar.so 拡張子が既に /usr/local/php/lib/php/extensions/no-debug-zts- にあることが確認されます。 20100525/。
php.ini を編集し、最後に yar.so 拡張子を追加して、Apache または php-pfm を再起動します。
えーわかりました。追加後、Apache または php-fpm を再起動する必要があります
[root@localhost /]# vi /usr/local/php/etc/php.ini [yar] extension=yar.soログイン後にコピー再起動後、phpinfo() ページを開いて検索すると、yar が表示されるはずです。
始めましょう
他の rpc フレームワークと同様、yar もサーバー/クライアント モデルなので、同じことを行って、それを呼び出す方法を示す簡単な例を書き始めます。
yar_server.php はサーバー側を表します
重启apache [root@localhost /]# /usr/local/apache/bin/apachectl restart 平滑重启php-fpm kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`ログイン後にコピーログイン後にコピーさて、ブラウザで実行してみましょう。以下に示すような出力が表示されます。とても高級です! ! ! Niao 兄弟は、これの目的は、RPC が提供するインターフェイスの数を一目で知ることであり、API ドキュメントは省略できると述べました。
それでは、yar_client.php を書き始めましょう。これがクライアントです。
<?php class API { public function api($parameter, $option = "foo") { return $parameter; } protected function client_can_not_see() { } } $service = new Yar_Server(new API()); $service->handle();ログイン後にコピー他の swoole や hprose などと同様に、基本的にはどちらがより多くの機能を持っているかによって決まります。使いやすくなります。
関連する推奨事項:
以上が人気のrpcフレームワークをphpで詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。