- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
当我运行下面的代码时,在我看来 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);
返回
int 1
boolean false
这似乎自相矛盾。怎么可能就绪了还没有消息呢?
我使用的php版本是5.3.9
最佳答案
基本上 curl_multi_select
会阻塞,直到有内容要用 curl_multi_exec
读取或发送。如果在不使用 curl_multi_select
的情况下循环使用 curl_multi_exec
,这将占用 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);
}
}
关于php - 为什么 curl_multi_select 和 curl_multi_info_read 相互矛盾?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10148979/
运行时Example #1 from PHP在 Windows XP PHP 5.3.5 上,curl_multi_select() 行将始终在指定的超时时间内阻塞(如果为空,它将阻塞 1 秒,如果我
当我运行下面的代码时,在我看来 curl_multi_select 和 curl_multi_info_read 相互矛盾。据我了解,curl_multi_select 应该是阻塞的,直到 curl_
好吧,我不知道如何很好地表达这个问题。但我正在尽我所能使多 curl 脚本尽快运行。我的第一次尝试直接来自 PHP 文档... do { $mrc = curl_multi_exec($thi
我的应用正在使用 curl_multi_select 等待 curl 调用完成。 curl_multi_select 中的默认超时设置为 1 秒。对于给定的 url,此调用在 Linux 上立即返回,
我是一名优秀的程序员,十分优秀!