PHP使用curl_multi_select解决curl_multi网页假死问题的方法
本篇章节讲解PHP使用curl_multi_select解决curl_multi网页假死问题的方法。分享给大家供大家参考,具体如下: curl_multi可以批处理事务,给网页编程带来很大的方便。不过在使用curl_multi的过程中,我们会遇到一个比较头疼的问题,那就是当并发处理的事务数量过多的时候,就会出现CPU过高,网页假死的现象,这是不可以忽视的。 今天,通过查询相关资料和测试,终于找到了一个解决问题的方法。 正常情况下,我们是这样使用 实例代码: $url) {
$conn[$i]=curl_init($url);
curl_setopt($conn[$i],CURLOPT_RETURNTRANSFER,1);
curl_multi_add_handle ($mh,$conn[$i]);
}
do { $n=curl_multi_exec($mh,$active); } while ($active);
foreach ($connomains as $i => $url) {
$res[$i]=curl_multi_getcontent($conn[$i]);
curl_close($conn[$i]);
}
print_r($res);
这个实例代码有个致命弱点,就是在do循环的那段,在整个url请求期间是个死循环,它会轻易导致CPU占用很高,网页出现假死状态。 经过测试发现,我们可以巧妙使用 方法如下: 把 改为 因为$active要等全部url数据接受完毕才变成false,所以这里用到了 另外可能遇到的问题: 控制每一个请求的超时时间,在 判断是否超时了或者其他错误,在 了解multi接口 当程序需要进行多次curl并发请求的时候,curl提供的multi接口就派上用场了。流畅大致是这样的: 1)、 2)、调用 3)、添加完毕后执行 4)、访问结束后 5)、最后 一个简单明了的PHP使用 0);
// 关闭全部句柄
curl_multi_remove_handle($mh,$ch1);
curl_multi_remove_handle($mh,$ch2);
curl_multi_close($mh);
?>
更多关于PHP相关内容感兴趣的读者可查看本站专题:《》、《》、《》、《》、《》及《》 希望本文所述对大家PHP程序设计有所帮助。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |