PHP Multi Curl Request,在等待响应时做一些工作

时间:2014-09-28 19:35:39

标签: php curl

以下是PHP的典型多卷曲请求示例:

$mh = curl_multi_init();

foreach ($urls as $index => $url) {
    $curly[$index] = curl_init($url);
    curl_setopt($curly[$index], CURLOPT_RETURNTRANSFER, 1);
    curl_multi_add_handle($mh, $curly[$index]);
}

// execute the handles
$running = null;
do {
    curl_multi_exec($mh, $running);
    curl_multi_select($mh);
} while($running > 0);

// get content and remove handles
$result = array();
foreach($curly as $index => $c) {
    $result[$index] = curl_multi_getcontent($c);
    curl_multi_remove_handle($mh, $c);
}

// all done
curl_multi_close($this->mh);

该过程包括3个步骤: 1.准备数据 2.发送请求并等待它们完成 3.收集回复

我想将第2步分成2部分,首先发送所有请求,然后收集所有响应,并做一些有用的工作,而不是仅仅等待,例如,处理最后一组请求的响应。

那么,我该如何拆分这部分代码

$running = null;
do {
    curl_multi_exec($mh, $running);
    curl_multi_select($mh);
} while($running > 0);

分成几个部分?

  1. 发送所有请求
  2. 等待时做另一份工作
  3. 检索所有回复
  4. 我试过这样:

    // Send the requests
    $running = null;
    curl_multi_exec($mh, $running);
    
    // Do some job while waiting
    // ...
    
    // Get all the responses
    do {
        curl_multi_exec($mh, $running);
        curl_multi_select($mh);
    } while($running > 0);
    

    但它似乎无法正常工作。

1 个答案:

答案 0 :(得分:0)

我找到了解决方案,这里是如何在不等待响应的情况下启动所有请求

do {
    curl_multi_exec($mh, $running);
} while (curl_multi_select($mh) === -1);

然后我们可以做任何其他工作,并在以后随时收到回复。