以下是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);
分成几个部分?
我试过这样:
// 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);
但它似乎无法正常工作。
答案 0 :(得分:0)
我找到了解决方案,这里是如何在不等待响应的情况下启动所有请求
do {
curl_multi_exec($mh, $running);
} while (curl_multi_select($mh) === -1);
然后我们可以做任何其他工作,并在以后随时收到回复。