流行的php rpc框架详解-php教程

资源魔 29 0

甚么是RPC框架?

假如用一句话归纳综合RPC就是:近程挪用框架(Remote Procedure Call

那甚么是近程挪用?

通常咱们挪用一个php中的办法,比方这样一个函数办法: localAdd(10, 20),localAdd办法的详细完成要末是用户本人界说的,要末是php库函数中自带的,也就说正在localAdd办法的代码完成正在内陆,它是一个内陆挪用!近程挪用意义就是:被挪用办法的详细完成没有正在顺序运转内陆,而是正在此外某个近程中央。

近程挪用原理

比方 A (client) 挪用 B (server) 提供的remoteAdd办法:

起首A与B之间建设一个TCP衔接;

而后A把需求挪用的办法名(这里是remoteAdd)和办法参数(10, 20)序列化成字节省发送进来;

B承受A发送过去的字节省,而后反序列化失去指标办法名,办法参数,接着执行相应的办法挪用(多是localAdd)并把后果30前往;

A承受近程挪用后果,输入30。

RPC框架就是把我方才说的这几点些细节给封装起来,给用户暴露简略敌对的API应用。

近程挪用的益处

解耦:当server需求对办法内完成修正时,client齐全感知没有到,不必做任何变卦;这类形式正在跨部门,跨公司协作的时分常常用到,而且办法的提供者咱们通常称为:效劳的暴露。

RPC与Socket有甚么区分?

经过下面的简略论述,如同RPC与Socket 如同啊。都是挪用近程的办法,都是client/server模式,我以前也写了一篇文章: 细说socket 那他们有啥区分呢?

RPC(近程进程挪用)采纳客户机/效劳器模式完成两个过程之间互相通讯。socket是RPC常常采纳的通讯手法之一,RPC是正在Socket的根底上完成的,它比socket需求更多的网络以及零碎资本。除了了Socket,RPC另有其余的通讯办法,比方:http、操作零碎自带的管道等技巧来完成关于近程顺序的挪用。微软的Windows零碎中,RPC就是采纳定名管道进行通讯。

RPC与REST有甚么区分?

经过理解RPC后,咱们晓得是RPC是client/server模式的,挪用近程的办法,REST也是咱们相熟的一套API挪用协定办法,它也是基于client/server模式的,挪用近程的办法的,那他俩又有啥区分呢?

REST API 以及 RPC 都是正在 Server端 把一个个函数封装成接口暴显露去,以供 Client端 挪用,不外 REST API 是基于HTTP协定的,REST努力于经过http协定中的POST/GET/PUT/DELETE等办法以及一个可读性强的URL来提供一个http申请。

而 RPC 则能够没有基于 HTTP协定

因而,假如是后端两种言语相互挪用,用 RPC 能够取得更好的功能(省去了 HTTP 报头号一系列货色),应该也更易设置装备摆设。

假如是前端经过 AJAX 挪用后端,那末用 REST API 的方式比拟好(由于无论若何也避没有开 HTTP 这道坎)。

php中盛行的rpc框架有哪些

既然php是世界上最佳的言语,那php中盛行的RPC框架有哪些呢?

先罗列下: phprpcyar, thrift, gRPC, swoole, hprose

由于工夫以及精力无限,不成能一个一个的去学习以及应用,我选几个世面上用的最多的几个用下吧。由于RPC原理是同样的,都是Client/Server模式,只是每一个框架的应用形式纷歧样罢了。

次要解说一下 phprpc 以及 yar 是我今朝据说以及接触最多的了。

phprpc

先从官网下载最新稳固版的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 下了。

上面,咱们就需求正在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

咱们参考官网的几个例子,操练下:

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

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 php开发教程 php开发资料 php开发自学

抱歉,评论功能暂时关闭!