【发布时间】:2014-11-20 07:13:53
【问题描述】:
我正在尝试使用 cURL 以带有回调的异步方式发出请求。我正在使用从网站复制的一段代码。
当我在浏览器中写入这个 url:http://www.myhost:3049/exemplo/index/async/ 它执行函数 asyncAction 即执行 curl_post 函数。
/**
* Send a POST requst using cURL
* @param string $url to request
* @param array $post values to send
* @param array $options for cURL
* @return string
*/
function curl_post($url, array $post = NULL, array $options = array())
{
$defaults = array(
CURLOPT_POST => 1,
CURLOPT_HEADER => 0,
CURLOPT_URL => $url,
CURLOPT_FRESH_CONNECT => 1,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_FORBID_REUSE => 1,
CURLOPT_TIMEOUT => 4,
CURLOPT_POSTFIELDS => http_build_query($post)
);
$ch = curl_init();
curl_setopt_array($ch, ($options + $defaults));
if( ! $result = curl_exec($ch))
{
$result = curl_error($ch);
}
curl_close($ch);
return $result;
}
public function asyncAction() {
$this->curl_post("http://www.myhost:3049/exemplo/index/add/");
}
然后 cURL 执行 cURL 到该 URL 以执行 NOW 与其他函数在同一类中的操作,仅用于测试。这个动作是 addAction,它只返回一个带有消息“CALLBACK”的字符串。
function addAction() {
sleep(15);
return "CALLBACK";
}
$result 只返回 false。 也许问题是我请求尝试执行与 cURL 函数在同一类中的操作。但无论如何,我怎样才能得到错误信息。 有没有更好的解决方案,经过测试,并且有关于使用异步回调的很好的解释?因为我读到的东西没有很好地解释,也没有解释什么时候,如何管理回调的事情。
【问题讨论】:
-
add脚本必须回显某些内容。 -
curl不是异步的。 -
我在谷歌上搜索了很多关于它的文章,我发现其中一些在谈论异步 cURL。例如在这个页面中,他们正在谈论这个:php.net/manual/pt_BR/function.curl-setopt.php
-
参见
curl_multi_init(不是异步的,但可以并行运行多个请求)。对于异步,您必须使用 Gearman (gearman.org)。它可作为 php 扩展使用。不确定,如果这对你有帮助。 -
您的代码不起作用,因为您设置了 4 秒超时,服务器休眠 15 秒。
标签: php curl asynchronous callback