Au lieu d'appeler les services l'un après l'autre,
Yar_Concurrent_Client enregistre d'abord plusieurs
appels, puis les dispatch tous en même temps avec
Yar_Concurrent_Client::loop(). Les réponses sont
passées au callback dans l'ordre où elles arrivent, pas dans l'ordre où
les appels ont été enregistrés.
Juste après que toutes les requêtes ont été envoyées, le callback est
invoqué une fois avec des arguments null pour signaler à l'appelant
qu'aucune requête n'est plus en attente ; l'exemple ci-dessous vérifie
cette notification.
<?php
function callback($ret, $callinfo) {
if ($callinfo == NULL) {
/* toutes les requêtes ont été envoyées, en attente des réponses */
return;
}
echo $callinfo['method'], " résultat : ", $ret, "\n";
}
function error_callback($type, $error, $callinfo) {
error_log("[$type] $error");
}
/* enregistre les appels asynchrones vers les services distants */
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");
/* envoie toutes les requêtes et attend les réponses */
Yar_Concurrent_Client::loop("callback", "error_callback");
?>
Résultat de l'exemple ci-dessus est similaire à :
mul résultat : 4
sub résultat : 1
add résultat : 3