can*_*ayo 8 php curl asynchronous callback
我正在尝试使用cURL以异步方式使用回调来执行请求.我正在使用从网站复制的一段代码.
当我在浏览器中写这个url:http://www.myhost:3049/exemplo/index/async /它执行执行curl_post函数的函数asyncAction.
/**
* 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/");
}
Run Code Online (Sandbox Code Playgroud)
然后cURL执行cURL到该URL以执行NOW与其他人运行的同一个类的操作,仅用于测试.这个动作是addAction,它只返回一个带有"CALLBACK"消息的字符串.
function addAction() {
sleep(15);
return "CALLBACK";
}
Run Code Online (Sandbox Code Playgroud)
$ result返回false.也许问题是我正在请求尝试执行与cURL函数属于同一类的操作.但无论如何,我怎么能得到错误信息.有没有更好的解决方案,经过测试,并且有关使用与回调异步的良好解释?因为我读到的东西没有得到很好的解释,也没有解释何时,如何管理回调的事情.
也许看看这个:https://gist.github.com/Xeoncross/2362936
请求:
class Requests
{
public $handle;
public function __construct()
{
$this->handle = curl_multi_init();
}
public function process($urls, $callback)
{
foreach ($urls as $url) {
$ch = curl_init($url);
curl_setopt_array($ch, array(CURLOPT_RETURNTRANSFER => TRUE));
curl_multi_add_handle($this->handle, $ch);
}
do {
$mrc = curl_multi_exec($this->handle, $active);
if ($state = curl_multi_info_read($this->handle)) {
//print_r($state);
$info = curl_getinfo($state['handle']);
//print_r($info);
$callback(curl_multi_getcontent($state['handle']), $info);
curl_multi_remove_handle($this->handle, $state['handle']);
}
usleep(10000); // stop wasting CPU cycles and rest for a couple ms
} while ($mrc == CURLM_CALL_MULTI_PERFORM || $active);
}
public function __destruct()
{
curl_multi_close($this->handle);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17811 次 |
| 最近记录: |