简介:
Yar是一个轻量级,高校的RPC框架,它提供了一种简单方法来让PHP项目之间可以互相远程调用对方的本地方法,并且Yar也提供了并行调用的能力,可以支持同事调用多个远程服务的方法。
Yar_Server:
-
描述:
-
实例化Yar_server的时候,需要传递一个自定义API对象,将这个对象保留在属性_executor中,然后会将我们提交的参数作为这个对个对象的method来使用,相当于一个简单的路由功能,将doc注释作为api的接口说明来使用
-
如果不是post请求,则只输出接口说明
-
如果是post请求,接受api函数,读取post数据,检测API对象中是否存在此方法,如果存在就call_user_function_ex来执行此方法
-
-
php类使用:
-
Yar_Server::__construct — 创建一个HTTP RPC Server
-
Yar_Server::handle — 启动HTTP RPC Server
-
Yar_client:
-
描述:
-
调用一个远程服务:实例化Yar_Client的时候,需要传递一个API的链接,并可以直接使用api中的方法
-
-
PHP类:
-
Yar_Client::__call --- 调用远程服务
-
Yar_Client::__construct --- 创建一个客户端实例
-
Yar_Client::setOpt --- 设置调用的配置
-
Yar_Concurrent_Client:
-
描述:
-
注册一个并行的服务调用,设置多个请求,所有的请求会一次发出, 只要有任何一个请求完成, 回调函数”callback”就会被立即调用。
-
-
PHP类:
-
Yar_Concurrent_Client::call --- 注册一个并行的服务调用
-
Yar_Concurrent_Client::loop --- 发送所有注册的并行调用
-
-
实现:
-
Yar_Concurrent_Client::call方法接收四个参数,
-
第一个是访问的接口地址,
-
第二个是需要执行的方法,
-
第三个是传递的参数,
-
第四个就是回调函数。
-
还有第五个参数,一个数组,它用来设置options,默认为空。
-
-
由Yar_Concurrent_Client::loop()统一发送 接收epoll事件,当发现有一个读事件时,读到所有数据然后调用callback。
-
实现代码:
client.php:
<?php
// 单个调用
$client = new Yar_Client('http://tool.jgb.bzdev.net/yar/service.php');
$result = $client->api('test');
// 并行调用
function callback($retval, $callinfo) {
print_r($retval);
print_r($callinfo);
}
Yar_Concurrent_Client::call("http://tool.jgb.bzdev.net/yar/service.php", "api", array("parameters"), "callback");
Yar_Concurrent_Client::call("http://tool.jgb.bzdev.net/yar/service.php", "api", array("parameters"), "callback");
Yar_Concurrent_Client::call("http://tool.jgb.bzdev.net/yar/service.php", "api", array("parameters"), "callback");
Yar_Concurrent_Client::call("http://tool.jgb.bzdev.net/yar/service.php", "api", array("parameters"), "callback");
Yar_Concurrent_Client::loop(); //send
service.php:
<?php
class service {
/**
* Yar测试
* @params string 参数
* @return string 返回内容
*/
public function api($param) {
return $param;
}
protected function client_can_not_see() { }
}
$service = new Yar_Server(new service());
$service->handle();