并行的RPC框架之Yar学习

Yar是一个非常轻量级的RPC框架
安装必备组件

yum -y install curl-devel

安装yar

pecl install msgpack
pecl install yar
或者编译 msgpack for php源码  https://github.com/msgpack/msgpack-php 可以单独安装,也可以如下。
phpize
./configure --with-php-config=/path/to/php-config/ --enable-msgpack
make && make install

服务端实现:

<?php
class API {
     /**
     * the doc info will be generated automatically into service info page.
     * @params
     * @return
     */
    public function api($parameter, $option = "foo") {
    }

    protected function client_can_not_see() {
    }
}

$service = new Yar_Server(new API());
$service->handle();

Yar为了方便开发, 把文档和接口绑定到了一起, 对于上面的例子, 如果我们是简单的GET请求这个接口地址的话, 我们就会看到如下的信息页面:
yar_server.png

这样, 我们可以在注释中,把接口的信息标注好, 就可以让文档和接口在一起了.

而对于Client端来说, 简单的串行调用, 会非常之简单:

<?php
$client = new Yar_Client("http://host/api/");
$result = $client->api("parameter);

并行调用

<?php
function callback($retval, $callinfo) {
     var_dump($retval);
}

Yar_Concurrent_Client::call("http://host/api/", "api", array("parameters"), "callback");
Yar_Concurrent_Client::call("http://host/api/", "api", array("parameters"), "callback");
Yar_Concurrent_Client::call("http://host/api/", "api", array("parameters"), "callback");
Yar_Concurrent_Client::call("http://host/api/", "api", array("parameters"), "callback");
Yar_Concurrent_Client::loop(); //send

这样, 所有的请求会一次发出, 只要有任何一个请求完成, 回调函数”callback”就会被立即调用.

这里还有一个细节, Yar见缝插针的不会浪费任何时间, 在这些请求发送完成以后, Yar会调用一次callback, 和普通的请求返回回调不同, 这次的调用的$callinfo参数为空.

这样一来, 我们就可以先发送请求, 然后再第一次回调, 继续做我们当前进程的工作, 等所有工作结束以后, 再交给Yar去获取并行RPC的响应.

<?php
function callback($retval, $callinfo) {
    if ($callinfo == NULL) {
       //做本地的逻辑
       return TRUE;
    }

     //RPC请求返回, 返回值在$retval
}

yar github :https://github.com/laruence/yar

文档接口:
Yar_Server — The Yar_Server class

  • Yar_Server::__construct — 创建一个HTTP RPC Server
  • Yar_Server::handle — 启动HTTP RPC Server

Yar_Client — The Yar_Client class

  • Yar_Client::__call — 调用远程服务
  • Yar_Client::__construct — 创建一个客户端实例
  • Yar_Client::setOpt — 设置调用的配置

Yar_Concurrent_Client — The Yar_Concurrent_Client class

  • Yar_Concurrent_Client::call — 注册一个并行的服务调用
  • Yar_Concurrent_Client::loop — 发送所有注册的并行调用
  • Yar_Concurrent_Client::reset — Clean all registered calls

Yar_Server_Exception — The Yar_Server_Exception class

  • Yar_Server_Exception::getType — 获取异常的原始类型
  • Yar_Client_Exception — The Yar_Client_Exception class
  • Yar_Client_Exception::getType — The getType purpose
最后修改时间为:2016 年 12 月 02 日 08 时 33 分 AM
如果觉得我的文章对你有用,请随意赞赏

发表评论