Yar_Concurrent_Client::loop

(PECL yar >= 1.0.0)

Yar_Concurrent_Client::loopEnvía todas las llamadas registradas y espera su respuesta

Descripción

public static function Yar_Concurrent_Client::loop(?callable $callback = null, ?callable $error_callback = null, ?array $options = null): ?bool

Enví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().

Parámetros

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.

Valores devueltos

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.

Ejemplos

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"

Véase también

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top