PHP Ajax Curl Multithread

时间:2016-06-11 16:29:09

标签: php ajax multithreading

我有3个API(www.api1.com,www.api2.com,www.api3.com),必须通过ajax curl调用,现在工作正常,但我意识到虽然api1没有完成api2进程将等到api1完成后,我怎么能让它成为并行呼叫(最快会显示)?

注意:我的意思是,我在PHP中有一些执行Curl的函数,函数是通过ajax调用的。

2 个答案:

答案 0 :(得分:0)

如果您使用的是apache,则可能是配置问题。看看apache多线程。 Nginx可能更适合,但我还不是多线程部分的专家。我在使用Nginx时没有遇到任何问题,我有许多同时运行的虚拟服务器设置。如果XDEBUG已经建立并且正在监视每个虚拟Web服务器,它将阻止它们同时运行。

没有ajax curl这样的东西。每个浏览器都会以不同的方式实现ajax,而curl可能会在幕后使用,但是说ajax curl会让人感到困惑。你在javascript中使用ajax,并且可能在服务器端使用curl(或像Guzzle一样卷曲的抽象)来与其他服务器通信。

答案 1 :(得分:0)

mpyw/co提供了非常简单的基于cURL和生成器的解决方案。

function curl_init_with($url, array $options = [CURLOPT_RETURNTRANSFER => true])
{
    $ch = curl_init($url);
    curl_setopt_array($ch, $options);
    return $ch;
}

实施例

并行执行3个cURL请求以加入其结果

$results = Co::wait([
    curl_init_with('www.api1.com'),
    curl_init_with('www.api2.com'),
    curl_init_with('www.api3.com'),
]);

并行执行包含cURL请求的2个生成器

Co::wait([
    function () {
        var_dump(yield [
            curl_init_with('www.api1.com'),
            curl_init_with('www.api2.com'),
            curl_init_with('www.api3.com'),
        ]);
    },
    function () {
        var_dump(yield [
            curl_init_with('www.api4.com'),
            curl_init_with('www.api5.com'),
            curl_init_with('www.api6.com'),
        ]);
    },
]);