(PECL yar >= 1.0.0)
Yar_Concurrent_Client::loop — Envía todas las llamadas registradas y espera su respuesta
$callback = null, ?callable $error_callback = null, ?array $options = null): ?boolEnvía en paralelo todas las llamadas registradas con Yar_Concurrent_Client::call() y bloquea hasta que todas las respuestas hayan llegado y hayan sido tratadas. La lista de llamadas se vacía cuando este método retorna.
Como las llamadas se ejecutan simultáneamente, el bucle solo dura lo que
dura la llamada más lenta, en lugar de la suma de todas las llamadas. Sin
embargo, los callbacks no se invocan en el orden en que se registraron las
llamadas: un callback se dispara en cuanto llega su respuesta. Para saber a
qué llamada corresponde una respuesta, se debe comparar la clave
sequence del argumento callinfo con
el número de secuencia devuelto por
Yar_Concurrent_Client::call(). El
array callinfo contiene la
sequence, la uri y el
method de la llamada; véase
Yar_Concurrent_Client::call().
callback
Un callable utilizado para tratar las respuestas de las
llamadas que se registraron sin su propio callback. Justo después de
que se hayan enviado todas las peticiones, se le llama además una vez
con dos argumentos null, antes de que llegue ninguna respuesta.
Si se omite este parámetro, el valor de retorno de una llamada satisfactoria simplemente se imprime cuando llega su respuesta.
error_callback
Un callable utilizado para tratar los errores de las
llamadas que se registraron sin su propio callback de error. Recibe
tres argumentos: el tipo de error (uno de los códigos
YAR_ERR_*), el mensaje de error y el
array callinfo.
Si se omite este parámetro, una llamada fallida emite en su lugar una advertencia de PHP; a diferencia del Yar_Client síncrono, no se lanza ninguna excepción.
options
Un array de opciones del cliente, indexado por las constantes
YAR_OPT_*, que se aplica a cada llamada registrada
que no las sobrescriba.
Devuelve true cuando todas las llamadas registradas han sido tratadas,
o cuando no se ha registrado ninguna llamada. Devuelve false si el
cliente concurrente ya se está ejecutando dentro de otro bucle; en ese
caso se emite una advertencia.
Ejemplo #1 Ejemplo de Yar_Concurrent_Client::loop()
<?php
function callback($retval, $callinfo) {
if ($callinfo == NULL) {
echo "Ahora todas las peticiones han sido enviadas, y no hay ninguna respuesta disponible\n";
} else {
echo "Esta es una respuesta de una llamada remota, el nombre del método es ", $callinfo["method"],
". La secuencia de llamada es ", $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 no se especifica el callback, se utilizará el callback de loop() */
Yar_Concurrent_Client::call("http://api.example.com/operator.php", "some_method", array("parameters"));
Yar_Concurrent_Client::loop("callback", "error_callback");
?>Resultado del ejemplo anterior es similar a:
Ahora todas las peticiones han sido enviadas, y no hay ninguna respuesta disponible Esta es una respuesta de una llamada remota, el nombre del método es some_method. La secuencia de llamada es 2 string(11) "some_method" Esta es una respuesta de una llamada remota, el nombre del método es some_method. La secuencia de llamada es 1 string(11) "some_method"