RPC フレームワークとは何ですか?
RPC を一文で要約すると: リモート呼び出しフレームワーク (リモート プロシージャ コール
)
では、リモート呼び出しとは何でしょうか。
通常、php では、localAdd(10, 20) のような関数メソッドなどのメソッドを呼び出します。localAdd メソッドの具体的な実装は、ユーザーによって定義されるか、 PHP ライブラリの関数、つまり、localAdd メソッドのコードがローカルに実装されている場合、これはローカル呼び出しです。リモート呼び出しとは、呼び出されるメソッドの特定の実装が、プログラムが実行されている場所ではなく、他のリモートの場所にあることを意味します。
リモート呼び出しの原則
たとえば、A (クライアント) は、B (サーバー) が提供する RemoteAdd メソッドを呼び出します。
まず、接続を確立します。 A と B 間の TCP 接続;
次に、A は呼び出す必要があるメソッド名 (ここではremoteAdd) とメソッド パラメータ (10、20) をバイト ストリームにシリアル化し、送信します。
B は A が送信したものを受け入れます 次に、バイト ストリームが逆シリアル化されてターゲット メソッド名とメソッド パラメータが取得され、対応するメソッド呼び出し (おそらく localAdd) が実行され、結果 30 が返されます。リモート呼び出しの結果と出力 30。
RPC フレームワークは、先ほど述べた詳細をカプセル化し、ユーザーにシンプルでフレンドリーな API の使用を提供します。
リモート呼び出しの利点分離: サーバーがメソッドを変更する必要がある場合、クライアントはそれをまったく認識せず、変更を加える必要がありません。メソッド 部門や会社を越えてコラボレーションする場合によく使用され、メソッドの提供者は通常「サービス公開」と呼ばれます。
RPC とソケットの違いは何ですか?上記の簡単な説明から、RPC と Socket は似ていることがわかります。これらはすべてリモート メソッドを呼び出し、すべてクライアント/サーバー モードです。以前にも記事を書きました: ソケットについて詳しく話しましょう。それらの違いは何ですか?
RPC (リモート プロシージャ コール) はクライアント/サーバーを使用しますこのモードでは、2 つのプロセスが相互に通信できるようになります。ソケットは RPC でよく使用される通信方式の 1 つであり、RPC はソケットに基づいて実装されているため、ソケットよりも多くのネットワーク リソースとシステム リソースが必要になります。 RPC には、Socket に加えて、http、オペレーティング システム独自のパイプライン、およびリモート プログラムへの呼び出しを実装するその他のテクノロジなど、他の通信方法もあります。 Microsoft の Windows システムでは、RPC は通信に名前付きパイプを使用します。
RPC と REST の違いは何ですか?RPC を理解すると、RPC がクライアント/サーバー モードであり、リモート メソッドを呼び出すことがわかります。REST も、私たちがよく知っている API 呼び出しプロトコル メソッドのセットです。また、クライアントに基づいています。 /server mode. はリモートメソッドを呼び出しますが、両者の違いは何でしょうか?
REST API と RPC は両方とも、関数をサーバー側のインターフェイスにカプセル化し、クライアント呼び出し用に公開します。ただし、REST API は HTTP プロトコルに基づいています。REST は http プロトコルで POST/ を渡すことに専念しています。 GET/PUT/DELETE などのメソッドと人間が判読できる URL を使用して http リクエストを提供します。
そして、RPC は HTTP プロトコルに基づく必要はありません
したがって、2 つのバックエンド言語が相互に呼び出しを行う場合、RPC を使用するとパフォーマンスが向上します (一連のHTTP ヘッダーなど) ) の設定も簡単になるはずです。
フロントエンドが AJAX 経由でバックエンドを呼び出す場合は、REST API を使用することをお勧めします (HTTP のハードルは避けられないため)。
php で人気のある RPC フレームワークは何ですかphp は世界で最高の言語なので、php で人気のある RPC フレームワークは何ですか?
最初に列挙しましょう:
phprpc、yar
、thrift
、gRPC
、swoole
、 hprose
時間とエネルギーには限りがあるため、1 つずつ学習して使用することは不可能です。世界で最も一般的に使用されているものをいくつか選択します。 RPC の原理は同じなので、どちらもクライアント/サーバー モードですが、それぞれのフレームワークの使用方法が異なります。
私が今まで一番聞いたことも触れることも多いphprpcとyarを中心に説明します。
phprpcまず、公式 Web サイトから phprpc の最新の安定バージョンをダウンロードします。ダウンロード リンクを実行して解凍します。
インストール内部には多くのファイルとフォルダーがあることがわかります。構造は次のとおりです:
dhparams/ pecl/ bigint.php compat.php phprpc_date.php xxtea.php dhparams.php phprpc_server.php phprpc_client.php
dhparamsとpeclというフォルダがあり、peclの中に入っているのはphpの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 にダウンロードされたことが表示されます。
次に、この xxtea.so を php.ini の最後に追加する必要があります:
[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
我们参考官网的几个例子,练习下:
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().....
google了下,说是先把 phprpc_server.php的413行的initSession()改成static function
static function initSession() { **** }
我了个擦,这么大的错误,phprpc是怎么发布的!!!
在把compat.php 的第 71行的 gzdecode()函数,php5.4已经实现了这个函数了。这样函数就被重写了,就报错了,所以加个判断:
if (!function_exists('gzdecode')) { //将gzdecode函数包括进来 }
好。改完,保存。再运行下server.php 。ok 了。不报错了。输出:
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!
这样一个简单的Server/Clent交付就搞定了。虽然中间出了点差错,但是总体来说还是蛮简单易懂的!
其他的更高级的用法可以参考官网的。
yar
yar 是国内著名的php大神鸟哥惠新宸的大作,在微博产品中已经开始使用。它也是一款rpc框架。它由于使用纯C编写的用于php的扩展,所以,效率应该是蛮高的,而且支持异步并行,这点还是赞的。
下载安装
官网下载: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/ 下了。
我们vi编辑一下 php.ini ,最后面加上yar.so扩展,然后重启一下 apache 或者php-pfm就可以了。
[root@localhost /]# vi /usr/local/php/etc/php.ini [yar] extension=yar.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()页面,搜索一下,应该就能够看到yar了。
开始使用
和其他的rpc框架一样,yar也是server/client模式,所以,我们也一样,开始写一个简单的例子来说下如何调用。
yar_server.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();
好,我们在浏览器里运行一下,就会出现如下图所示的输出。很高端啊!!!鸟哥说这样做的用途是可以一目了然的知道我这个rpc提供了多少接口,把api文档都可以省略了。
好,我们开始写yar_client.php 这个是客户端:
$client = new Yar_Client("http://127.0.0.1/yar_server.php"); echo $client->api('helo word');
像其他的 swoole,hprose等基本都是这个原理,只是看谁的功能更加,用起来更顺手罢了。
更多相关php知识,请访问php教程!
以上が人気のphp・rpcフレームワークを詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。