<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/class.yar-concurrent-client.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'es',
  ),
  'this' => 
  array (
    0 => 'yar-concurrent-client.loop.php',
    1 => 'Yar_Concurrent_Client::loop',
    2 => 'Env&iacute;a todas las llamadas registradas y espera su respuesta',
  ),
  'up' => 
  array (
    0 => 'class.yar-concurrent-client.php',
    1 => 'Yar_Concurrent_Client',
  ),
  'prev' => 
  array (
    0 => 'yar-concurrent-client.call.php',
    1 => 'Yar_Concurrent_Client::call',
  ),
  'next' => 
  array (
    0 => 'yar-concurrent-client.reset.php',
    1 => 'Yar_Concurrent_Client::reset',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'es',
    'path' => 'reference/yar/yar_concurrent_client/loop.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="yar-concurrent-client.loop" class="refentry">
 <div class="refnamediv">
  <h1 class="refname">Yar_Concurrent_Client::loop</h1>
  <p class="verinfo">(PECL yar &gt;= 1.0.0)</p><p class="refpurpose"><span class="refname">Yar_Concurrent_Client::loop</span> &mdash; <span class="dc-title">Envía todas las llamadas registradas y espera su respuesta</span></p>

 </div>

 <div class="refsect1 description" id="refsect1-yar-concurrent-client.loop-description">
  <h3 class="title">Descripción</h3>
  <div class="methodsynopsis dc-description">
   <span class="modifier">public</span> <span class="modifier">static</span> <span class="modifier">function</span> <span class="methodname"><strong>Yar_Concurrent_Client::loop</strong></span>(<span class="methodparam"><span class="type"><span class="type"><a href="language.types.null.php" class="type null">?</a></span><span class="type"><a href="language.types.callable.php" class="type callable">callable</a></span></span> <code class="parameter">$callback</code><span class="initializer"> = null</span></span>, <span class="methodparam"><span class="type"><span class="type"><a href="language.types.null.php" class="type null">?</a></span><span class="type"><a href="language.types.callable.php" class="type callable">callable</a></span></span> <code class="parameter">$error_callback</code><span class="initializer"> = null</span></span>, <span class="methodparam"><span class="type"><span class="type"><a href="language.types.null.php" class="type null">?</a></span><span class="type"><a href="language.types.array.php" class="type array">array</a></span></span> <code class="parameter">$options</code><span class="initializer"> = null</span></span>): <span class="type"><span class="type"><a href="language.types.null.php" class="type null">?</a></span><span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span></span></div>

  <p class="simpara">
   Envía en paralelo todas las llamadas registradas con
   <span class="methodname"><a href="yar-concurrent-client.call.php" class="methodname">Yar_Concurrent_Client::call()</a></span> 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.
  </p>
  <p class="simpara">
   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
   <code class="literal">sequence</code> del argumento <code class="literal">callinfo</code> con
   el número de secuencia devuelto por
   <span class="methodname"><a href="yar-concurrent-client.call.php" class="methodname">Yar_Concurrent_Client::call()</a></span>. El
   <span class="type"><a href="language.types.array.php" class="type array">array</a></span> <code class="literal">callinfo</code> contiene la
   <code class="literal">sequence</code>, la <code class="literal">uri</code> y el
   <code class="literal">method</code> de la llamada; véase
   <span class="methodname"><a href="yar-concurrent-client.call.php" class="methodname">Yar_Concurrent_Client::call()</a></span>.
  </p>
 </div>


 <div class="refsect1 parameters" id="refsect1-yar-concurrent-client.loop-parameters">
  <h3 class="title">Parámetros</h3>
  <dl>
   
    <dt><code class="parameter">callback</code></dt>
    <dd>
     <p class="simpara">
      Un <span class="type"><a href="language.types.callable.php" class="type callable">callable</a></span> 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 <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong>, antes de que llegue ninguna respuesta.
     </p>
     <p class="simpara">
      Si se omite este parámetro, el valor de retorno de una llamada
      satisfactoria simplemente se imprime cuando llega su respuesta.
     </p>
    </dd>
   
   
    <dt><code class="parameter">error_callback</code></dt>
    <dd>
     <p class="simpara">
      Un <span class="type"><a href="language.types.callable.php" class="type callable">callable</a></span> 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
      <code class="literal">YAR_ERR_*</code>), el mensaje de error y el
      <span class="type"><a href="language.types.array.php" class="type array">array</a></span> <code class="literal">callinfo</code>.
     </p>
     <p class="simpara">
      Si se omite este parámetro, una llamada fallida emite en su lugar una
      advertencia de PHP; a diferencia del <span class="classname"><a href="class.yar-client.php" class="classname">Yar_Client</a></span>
      síncrono, no se lanza ninguna excepción.
     </p>
    </dd>
   
   
    <dt><code class="parameter">options</code></dt>
    <dd>
     <p class="simpara">
      Un <span class="type"><a href="language.types.array.php" class="type array">array</a></span> de opciones del cliente, indexado por las constantes
      <code class="literal">YAR_OPT_*</code>, que se aplica a cada llamada registrada
      que no las sobrescriba.
     </p>
    </dd>
   
  </dl>
 </div>


 <div class="refsect1 returnvalues" id="refsect1-yar-concurrent-client.loop-returnvalues">
  <h3 class="title">Valores devueltos</h3>
  <p class="simpara">
   Devuelve <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> cuando todas las llamadas registradas han sido tratadas,
   o cuando no se ha registrado ninguna llamada. Devuelve <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> si el
   cliente concurrente ya se está ejecutando dentro de otro bucle; en ese
   caso se emite una advertencia.
  </p>
 </div>


 <div class="refsect1 examples" id="refsect1-yar-concurrent-client.loop-examples">
  <h3 class="title">Ejemplos</h3>
  <div class="example" id="example-1">
   <p><strong>Ejemplo #1 Ejemplo de <span class="methodname"><strong>Yar_Concurrent_Client::loop()</strong></span></strong></p>
   <div class="example-contents">
<div class="phpcode"><pre><code style="color: #000000"><span style="color: #0000BB">&lt;?php
</span><span style="color: #007700">function </span><span style="color: #0000BB">callback</span><span style="color: #007700">(</span><span style="color: #0000BB">$retval</span><span style="color: #007700">, </span><span style="color: #0000BB">$callinfo</span><span style="color: #007700">) {
    if (</span><span style="color: #0000BB">$callinfo </span><span style="color: #007700">== </span><span style="color: #0000BB">NULL</span><span style="color: #007700">) {
        echo </span><span style="color: #DD0000">"Ahora todas las peticiones han sido enviadas, y no hay ninguna respuesta disponible\n"</span><span style="color: #007700">;
    } else {
        echo </span><span style="color: #DD0000">"Esta es una respuesta de una llamada remota, el nombre del método es "</span><span style="color: #007700">, </span><span style="color: #0000BB">$callinfo</span><span style="color: #007700">[</span><span style="color: #DD0000">"method"</span><span style="color: #007700">],
             </span><span style="color: #DD0000">". La secuencia de llamada es "</span><span style="color: #007700">, </span><span style="color: #0000BB">$callinfo</span><span style="color: #007700">[</span><span style="color: #DD0000">"sequence"</span><span style="color: #007700">], </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;
        </span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$retval</span><span style="color: #007700">);
    }
}

function </span><span style="color: #0000BB">error_callback</span><span style="color: #007700">(</span><span style="color: #0000BB">$type</span><span style="color: #007700">, </span><span style="color: #0000BB">$error</span><span style="color: #007700">, </span><span style="color: #0000BB">$callinfo</span><span style="color: #007700">) {
    </span><span style="color: #0000BB">error_log</span><span style="color: #007700">(</span><span style="color: #0000BB">$error</span><span style="color: #007700">);
}

</span><span style="color: #0000BB">Yar_Concurrent_Client</span><span style="color: #007700">::</span><span style="color: #0000BB">call</span><span style="color: #007700">(</span><span style="color: #DD0000">"http://api.example.com/operator.php"</span><span style="color: #007700">, </span><span style="color: #DD0000">"some_method"</span><span style="color: #007700">, array(</span><span style="color: #DD0000">"parameters"</span><span style="color: #007700">), </span><span style="color: #DD0000">"callback"</span><span style="color: #007700">);

</span><span style="color: #FF8000">/* si no se especifica el callback, se utilizará el callback de loop() */
</span><span style="color: #0000BB">Yar_Concurrent_Client</span><span style="color: #007700">::</span><span style="color: #0000BB">call</span><span style="color: #007700">(</span><span style="color: #DD0000">"http://api.example.com/operator.php"</span><span style="color: #007700">, </span><span style="color: #DD0000">"some_method"</span><span style="color: #007700">, array(</span><span style="color: #DD0000">"parameters"</span><span style="color: #007700">));

</span><span style="color: #0000BB">Yar_Concurrent_Client</span><span style="color: #007700">::</span><span style="color: #0000BB">loop</span><span style="color: #007700">(</span><span style="color: #DD0000">"callback"</span><span style="color: #007700">, </span><span style="color: #DD0000">"error_callback"</span><span style="color: #007700">);
</span><span style="color: #0000BB">?&gt;</span></code></pre></div>
   </div>

   <div class="example-contents"><p>Resultado del ejemplo anterior
es similar a:</p></div>
   <div class="example-contents screen">
<div class="examplescode"><pre class="examplescode">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) &quot;some_method&quot;
Esta es una respuesta de una llamada remota, el nombre del método es some_method. La secuencia de llamada es 1
string(11) &quot;some_method&quot;</pre>
</div>
   </div>
  </div>
 </div>


 <div class="refsect1 seealso" id="refsect1-yar-concurrent-client.loop-seealso">
  <h3 class="title">Véase también</h3>
  <ul class="simplelist">
   <li><span class="methodname"><a href="yar-concurrent-client.call.php" class="methodname" rel="rdfs-seeAlso">Yar_Concurrent_Client::call()</a> - Registra una llamada concurrente</span></li>
   <li><span class="methodname"><a href="yar-concurrent-client.reset.php" class="methodname" rel="rdfs-seeAlso">Yar_Concurrent_Client::reset()</a> - Limpia todas las llamadas registradas</span></li>
  </ul>
 </div>


</div><?php manual_footer($setup); ?>