(PECL yar >= 1.0.0)
Yar_Concurrent_Client::loop — Envoie tous les appels enregistrés et attend leur réponse
$callback = null, ?callable $error_callback = null, ?array $options = null): ?boolEnvoie en parallèle tous les appels enregistrés avec Yar_Concurrent_Client::call() et bloque jusqu'à ce que chaque réponse soit arrivée et ait été traitée. La liste des appels est vidée lorsque cette méthode retourne.
Comme les appels s'exécutent simultanément, la boucle ne dure que le
temps du seul appel le plus lent, plutôt que la somme de tous les appels.
Les callbacks, cependant, ne sont pas invoqués dans l'ordre où les appels
ont été enregistrés : un callback se déclenche dès que sa réponse arrive.
Pour savoir à quel appel appartient une réponse, comparer l'entrée
sequence de l'argument callinfo avec
le numéro de séquence retourné par
Yar_Concurrent_Client::call(). Le tableau
callinfo contient la sequence,
l'uri et la method de l'appel ; voir
Yar_Concurrent_Client::call().
callback
Un callable utilisé pour traiter les réponses des appels
qui ont été enregistrés sans leur propre fonction de rappel. Juste
après l'envoi de toutes les requêtes, il est de plus appelé une fois
avec deux arguments null, avant l'arrivée de toute réponse.
Si ce paramètre est omis, la valeur de retour d'un appel réussi est simplement affichée lorsque sa réponse arrive.
error_callback
Un callable utilisé pour traiter les erreurs des appels
qui ont été enregistrés sans leur propre fonction de rappel d'erreur.
Il reçoit trois arguments : le type d'erreur (l'un des codes
YAR_ERR_*), le message d'erreur et le tableau
callinfo.
Si ce paramètre est omis, un appel échoué émet un avertissement PHP ; contrairement au Yar_Client synchrone, aucune exception n'est levée.
options
Un tableau d'options du client, indexé par les constantes
YAR_OPT_*, appliqué à chaque appel enregistré qui
ne les redéfinit pas.
Retourne true lorsque chaque appel enregistré a été traité, ou lorsque
aucun appel n'a été enregistré du tout. Retourne false si le client
concurrent est déjà en cours d'exécution dans une autre boucle ; dans ce
cas, une alerte est émise.
Exemple #1 Exemple avec Yar_Concurrent_Client::loop()
<?php
function callback($retval, $callinfo) {
if ($callinfo == NULL) {
echo "Maintenant, toutes les requêtes ont été émises, et aucune réponse n'est disponible\n";
} else {
echo "Ceci est une réponse à un appel distant, le nom de la méthode est ", $callinfo["method"],
". La séquence d'appel est ", $callinfo["sequence"], "\n";
var_dump($retval);
}
}
function error_callback($type, $error, $callinfo) {
error_log($error);
}
Yar_Concurrent_Client::call("http://api.example.com/operator.php", "some_method", array("parameters"), "callback");
/* si la fonction de rappel n'est pas spécifiée, celle de loop() sera utilisée */
Yar_Concurrent_Client::call("http://api.example.com/operator.php", "some_method", array("parameters"));
Yar_Concurrent_Client::loop("callback", "error_callback");
?>Résultat de l'exemple ci-dessus est similaire à :
Maintenant, toutes les requêtes ont été émises, et aucune réponse n'est disponible Ceci est une réponse à un appel distant, le nom de la méthode est some_method. La séquence d'appel est 2 string(11) "some_method" Ceci est une réponse à un appel distant, le nom de la méthode est some_method. La séquence d'appel est 1 string(11) "some_method"