示例

示例 #1 Yar 服务器示例

<?php

/* 假设此页面可以通过 http://example.com/operator.php 访问 */

class Operator {

/**
* 添加两个操作数
* @param 整数
* @return 整数
*/
public function add($a, $b) {
return
$this->_add($a, $b);
}

/**
* 减
*/
public function sub($a, $b) {
return
$a - $b;
}

/**
* 乘
*/
public function mul($a, $b) {
return
$a * $b;
}

/**
* 受保护的方法不会暴露
* @param 整数
* @return 整数
*/
protected function _add($a, $b) {
return
$a + $b;
}
}

$server = new Yar_Server(new Operator());
$server->handle();
?>

示例 #2 在浏览器中访问服务器(GET 请求)

上面的示例将输出类似于

Yar Server Info

示例 #3 Yar 客户端示例

<?php
$client
= new yar_client("http://example.com/operator.php");

/* 直接调用 */
var_dump($client->add(1, 2));

/* 通过 call 调用 */
var_dump($client->call("add", array(3, 2)));


/* __add 无法调用 */
var_dump($client->_add(1, 2));
?>

上面的示例将输出类似于

int(3)
int(5)
PHP Fatal error:  Uncaught exception 'Yar_Server_Exception' with message 'call to api Operator::_add() failed' in *

示例 #4 Yar 并发客户端示例

<?php
function callback($ret, $callinfo) {
echo
$callinfo['method'] , " result: ", $ret , "\n";
}

/* 注册异步调用到远程服务 */
Yar_Concurrent_Client::call("http://example.com/operator.php", "add", array(1, 2), "callback");
Yar_Concurrent_Client::call("http://example.com/operator.php", "sub", array(2, 1), "callback");
Yar_Concurrent_Client::call("http://example.com/operator.php", "mul", array(2, 2), "callback");

/* 发送所有请求并等待响应 */
Yar_Concurrent_Client::loop();
?>

上面的示例将输出类似于

mul result: 4
sub result: 1
add result: 3
添加备注

用户贡献的备注 1 备注

124960772 at qq dot com
8 年前
<?php
function callback($ret, $callinfo) {
echo
$callinfo['method'] , " result: ", $ret , "\n";
}

/* 注册一个异步调用 */
Yar_Concurrent_Client::call("http://example.com/operator.php", "add", array(1, 2), "callback");
/* 发送所有注册的调用, 等待返回, 返回后Yar会调用callback回掉函数 */
Yar_Concurrent_Client::loop();
/* 重置call ,否则上面的call会调用*/
Yar_Concurrent_Client::reset();
Yar_Concurrent_Client::call("http://example.com/operator.php", "sub", array(2, 1), "callback");
Yar_Concurrent_Client::loop();

?>
To Top