Yar_Concurrent_Client::loop

(Yar >= 1.0.0)

Yar_Concurrent_Client::loop发送并等待所有已注册的调用

说明

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

并行发送所有通过 Yar_Concurrent_Client::call() 注册的调用, 并阻塞直到每一个响应都已到达并被处理完毕。 此方法返回时,调用列表会被清空。

参数

callback

用于处理注册时没有指定自身回调的调用的响应的 callable。 在全部请求发送完毕后,它还会先于任何响应到达之前, 额外被调用一次,此时两个参数均为 null

error_callback

用于处理注册时没有指定自身错误回调的调用的错误的 callable。 接收三个参数:错误类型(YAR_ERR_* 错误码之一)、错误消息,以及 callinfo array

options

客户端选项的 array,以 YAR_OPT_* 常量作为键, 应用于每一个未自行覆盖这些选项的已注册调用。

返回值

当所有已注册的调用都已处理完毕,或者根本没有注册任何调用时,返回 true。 如果并发客户端已经在另一个 loop 中运行,则返回 false; 此时会产生一条警告。

示例

示例 #1 Yar_Concurrent_Client::loop() 示例

<?php
function callback($retval, $callinfo) {
    if ($callinfo == NULL) {
        echo "Now, all requests are sent, and no response available\n";
    } else {
        echo "This is a remote call response, the method name is ", $callinfo["method"],
             ". calling sequence is ", $callinfo["sequence"], "\n";
        var_dump($retval);
    }
}

function error_callback($type, $error, $callinfo) {
    error_log($error);
}

Yar_Concurrent_Client::call("http://host/api/", "some_method", array("parameters"), "callback");

/* 如果不指定回调, 将使用 loop() 的回调 */
Yar_Concurrent_Client::call("http://host/api/", "some_method", array("parameters"));

Yar_Concurrent_Client::loop("callback", "error_callback");
?>

以上示例的输出类似于:

Now, all requests are sent, and no response available
This is a remote call response, the method name is some_method. calling sequence is 2
string(11) "some_method"
This is a remote call response, the method name is some_method. calling sequence is 1
string(11) "some_method"

参见