Yar_Concurrent_Client
不是逐个调用服务,而是先注册多个调用,然后通过
Yar_Concurrent_Client::loop()
一次性发出所有调用。响应按到达的顺序传递给回调函数,
而不是按调用注册的顺序。
在全部请求发送完毕后,回调函数会以 null
参数被调用一次,以便调用方知道没有更多请求等待发送;
下面的示例检查了这个通知。
<?php
function callback($ret, $callinfo) {
if ($callinfo == NULL) {
/* all requests are sent, waiting for the responses */
return;
}
echo $callinfo['method'], " result: ", $ret, "\n";
}
function error_callback($type, $error, $callinfo) {
error_log("[$type] $error");
}
/* 注册对远程服务的异步调用 */
Yar_Concurrent_Client::call("http://api.example.com/operator.php", "add", array(1, 2), "callback");
Yar_Concurrent_Client::call("http://api.example.com/operator.php", "sub", array(2, 1), "callback");
Yar_Concurrent_Client::call("http://api.example.com/operator.php", "mul", array(2, 2), "callback");
/* 发送所有请求并等待响应 */
Yar_Concurrent_Client::loop("callback", "error_callback");
?>
mul result: 4
sub result: 1
add result: 3