http://pecl.php.net/package/msgpack
http://pecl.php.net/package/yar
1.安装msgpack,msgpack是一个高效的二进制打包协议.prc的客户端和服务器都需要用到此扩展.
(1).sudo yum install php-pecl-msgpack-devel.x86_64
(2).修改php.ini,添加 extension=msgpack.so
(3).重启 sudo service php-fpm restart
2.安装yar扩展,yar是鸟哥(laruence)开发的一个并行的RPC框架
(1). sudo pecl install yar
(2).修改php.ini,添加 extension=yar.so
(3).重启 sudo service php-fpm restart
出错:
configure: error: Please reinstall the libcurl distribution - easy.h should be in <curl-dir>/include/curl/
解决:yum -y install curl-devel
安装成功之后就可以进行测试了。
服务端的代码如下(testyars.php):
<?php
class Operator {
/**
* Add two operands
* @param interge
* @return interge
*/
public function add($a, $b) {
return $this->_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 interge
* @return interge
*/
public function _add($a, $b) {
return $a + $b;
}
}
error_reporting(E_ALL);
ini_set('display_errors', 'on');
$server = new Yar_Server(new Operator());
$server->handle();
?>
客户端的代码如下:
(1).同步操作(testyarc.php)
<?php
error_reporting(E_ALL);
ini_set('display_errors', 'on');
$client = new yar_client("http://www.test.com/testyars.php");
/* call directly */
var_dump($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));
?>
(2)。异步操作(testyarc2.php)
<?php
error_reporting(E_ALL);
ini_set('display_errors', 'on');
function callback($ret, $callinfo) {
echo $callinfo['method'] , " result: ", $ret , "\n";
return 0;
}
/* 注册一个异步调用 */
Yar_Concurrent_Client::call("http://127.0.0.1:8080/testyars.php", "add", array(1, 2), "callback");
Yar_Concurrent_Client::call("http://127.0.0.1:8080/testyars.php", "sub", array(2, 1), "callback");
Yar_Concurrent_Client::call("http://127.0.0.1:8080/testyars.php", "mul", array(2, 2), "callback");
/* 发送所有注册的调用, 等待返回, 返回后Yar会调用callback回掉函数 */
Yar_Concurrent_Client::loop();
?>
注:异步的时候,请求的url必须是ip+端口号.
参考文章
http://blog.youkuaiyun.com/diandianxiyu_geek/article/details/17119341
http://www.360doc.com/content/14/0528/22/11482448_381859903.shtml
http://blog.sina.com.cn/s/blog_6bb942f70101hven.html
http://blog.youkuaiyun.com/diandianxiyu_geek/article/details/17145857