had*_*ees 4 php curl curl-multi
当我运行以下代码时,在我看来curl_multi_select并且curl_multi_info_read相互矛盾.据我所知,它curl_multi_select应该是阻塞,直到curl_multi_exec有响应,但我还没有看到实际发生.
$url = "http://google.com";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_VERBOSE, TRUE);
$mc = curl_multi_init();
curl_multi_add_handle($mc, $ch);
do {
$exec = curl_multi_exec($mc, $running);
} while ($exec == CURLM_CALL_MULTI_PERFORM);
$ready=curl_multi_select($mc, 100);
var_dump($ready);
$info = curl_multi_info_read($mc,$msgs);
var_dump($info);
Run Code Online (Sandbox Code Playgroud)
这回来了
int 1
boolean false
Run Code Online (Sandbox Code Playgroud)
这似乎与自己相矛盾.怎么可以准备好,没有任何消息?
我正在使用的php版本是5.3.9
基本上curl_multi_select阻止,直到有东西可读curl_multi_exec.如果你curl_multi_exec不使用curl_multi_select这个循环就会占用100%的CPU.因此curl_multi_info_read用于检查是否有任何传输已经结束(正确或有错误).
使用多句柄的代码应遵循以下模式:
do
{
$mrc = curl_multi_exec($this->mh, $active);
}
while ($mrc == CURLM_CALL_MULTI_PERFORM);
while ($active && $mrc == CURLM_OK)
{
curl_multi_select($this->mh);
do
{
$mrc = curl_multi_exec($this->mh, $active);
}
while ($mrc == CURLM_CALL_MULTI_PERFORM);
while ($info = curl_multi_info_read($this->mh))
{
$this->process_ch($info);
}
}
Run Code Online (Sandbox Code Playgroud)
另请参阅:以正确的方式执行curl_multi_exec.
| 归档时间: |
|
| 查看次数: |
4004 次 |
| 最近记录: |