一、安装 Yar
类方法的远程调用,也就是一个rpc请求。
RPC本质上也是一个网络请求,既然是请求,对于效率来说,就需要考虑了。yar是基于http来做的。
特点:能够实现多个请求并发。
优点:这些调用通过扩展的c代码实现,简单高效
pecl install yar
pecl install msgpack
安装yar过程若提示libcurl需要reinstall,
wget https://curl.haxx.se/download/curl-7.62.0.tar.gz
tar zxvf curl-7.62.0.tar.gz
./configure
make&&make install
二、确保 php 加载 yar 模块
~/curl-7.62.0 » php -m |egrep 'yar|msgpack' hushiqiang@EddiedeMacBook-Pro
msgpack
yar
三、编写服务器端 Server.php , 在浏览器打开 http://.../Server.php 可见API的介绍如下
<?php
class API {
public function some_method($parameter, $options = "foo") {
$info = "welcome, {$parameter}, ".$_SERVER['REMOTE_ADDR'];
return json_encode(array('res' => $info));
}
public function demo() {
sleep(1);
return "123";
}
}
四、编写客户端 Client.php , 编写完毕可 php Client.php 查看结果
<?php
$client = new Yar_Client("http://.../Server.php");
$client->SetOpt(YAR_OPT_CONNECT_TIMEOUT, 1000);
// $client->SetOpt(YAR_OPT_HEADER, array("hd1: val"));
$result = $client->some_method("panguangyu");
print_r($result)
// 会显示Server.php中some_method方法执行的结果
五、并发性测试 MultiClient.php , 编写完毕可 php MultiClient.php 查看结果
<?php
function callback($retval, $callinfo) {
echo "success\n";
var_dump($retval);
var_dump($callinfo);
}
function error_callback($type, $error, $callinfo) {
echo "error\n";
error_log($error);
}
Yar_Concurrent_Client::call("http://.../Server.php", "demo", array(), "callback", "error_callback");
Yar_Concurrent_Client::call("http://.../Server.php", "demo", array(), "callback", "error_callback");
Yar_Concurrent_Client::call("http://.../Server.php", "demo", array(), "callback", "error_callback");
Yar_Concurrent_Client::loop();