[TOC]
Yar RPC 框架使用指南
Yar
是一个轻量级, 高效的 RPC
框架, 它提供了一种简单方法来让 PHP
项目之间可以互相远程调用对方的本地方法。并且 Yar
也提供了并行调用的能力。可以支持同时调用多个远程服务的方法。
Yar 它是一个 RPC 框架。所以,也具备 RPC 的特性。RPC 框架最终实现了业务的解耦。比如,我们一个庞大的应用,有用户中心、订单中心、物流中心等模块。并且这些模块在长年累月经过不同的人迭代之后,变得异常难以维护。此时,我们可以 RPC 方案进行解耦。然后,在老模块进行调用。
其次,Yar 框架还具备并行请求的功能。即同时可以发起多个请求,然后统一回调。整体用时取决于请求中最长用时的请求。
基于这些特性,我们可以把不同的模块进行拆分分开部分。然后,通过 RPC 方式提供服务。从而达到高并发高吞吐分布式的要求。千万上亿的 PV 毫无压力。
一、安装 Msgpack 扩展
Yar
支持 msgpack
、 json
、 php
三种打包协议。 msgpack
打包协议,相对其他两种打包协议更高效。所以,推荐使用 msgpack
打包协议。
$ wget https://pecl.php.net/get/msgpack-2.0.3.tgz
$ tar zxvf msgpack-2.0.3.tgz
$ cd msgpack-2.0.3
$ phpize
$ ./configure
$ make && make install
扩展安装成功之后。还需要在 php.ini
文件中追加如下两行:
[msgpack]
extension = msgpack.so
二、安装 Yar 扩展
$ wget https://pecl.php.net/get/yar-2.0.5.tgz
$ tar zxvf yar-2.0.5.tgz
$ cd yaf-2.0.5
$ phpize
$ ./configure --enable-msgpack
$ make && make install
由于我们使用了 msgpack
打包协议。所以,我们在 ./configure
后面增加了 --enable-msgpack
。如果不加,则无法使用 msgpack
协议。即使,我们已经正确安装了该扩展。
php.ini
增加:
[yar]
extension = yar.so
三、RPC 示例
3.1 Server 端示例
_add($a, $b);
}
/**
* Sub
*/
public function sub($a, $b) {
return $a - $b;
}
/**
* Mul
*/
public function mul($a, $b) {
return $a * $b;
}
/**
* Protected methods will not be exposed
* @param intergr
* @return intergr
*/
protected function _add($a, $b) {
return $a + $b;
}
}
$server = new Yar_Server(new Operator());
$server->handle();
查看示例:
假设,访问 Operator.php 访问地址为 http://local.test.com/rpc/server/Operator.php
。 那么,此时访问该地址会出现相应的文档。
3.2 Client 端示例
add(1, 2));
/* call via call */
var_dump($client->call("add", array(3, 2)));
/* __add can not be called */
// var_dump($client->_add(1, 2));
此时,我们通过浏览器直接访问这个脚本会得到具体的运算结果。