En lugar de llamar a los servicios uno tras otro,
Yar_Concurrent_Client registra primero varias
llamadas y luego las envía todas a la vez con
Yar_Concurrent_Client::loop(). Las respuestas se
pasan al callback en el orden en que llegan, no en el orden en que se
registraron las llamadas.
Justo después de que se hayan enviado todas las peticiones, el callback
se invoca una vez con argumentos null para que quien lo llama sepa que
no queda ninguna petición pendiente; el ejemplo siguiente comprueba esta
notificación.
<?php
function callback($ret, $callinfo) {
if ($callinfo == NULL) {
/* todas las peticiones se han enviado, esperando las respuestas */
return;
}
echo $callinfo['method'], " resultado: ", $ret, "\n";
}
function error_callback($type, $error, $callinfo) {
error_log("[$type] $error");
}
/* registra llamadas asíncronas a servicios remotos */
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");
/* envía todas las peticiones y espera las respuestas */
Yar_Concurrent_Client::loop("callback", "error_callback");
?>
Resultado del ejemplo anterior
es similar a:
mul resultado: 4
sub resultado: 1
add resultado: 3