gpt4 book ai didi

带回调的 PHP 异步 cURL

转载 作者:可可西里 更新时间:2023-11-01 12:34:11 28 4
gpt4 key购买 nike

我正在尝试以异步方式使用 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 对该 URL 执行 cURL 以执行一个 Action ,该 Action 现在与其他功能在同一个类中,仅用于测试。这个 Action 是 addAction,它只返回一个带有消息“CALLBACK”的字符串。

function addAction() {
sleep(15);
return "CALLBACK";
}

$result 只返回 false。也许问题是我请求尝试执行与 cURL 函数在同一类中的操作。但无论如何,我怎样才能得到错误信息。有没有更好的解决方案,经过测试,并且对使用 as asynchronous with callback 有很好的解释?因为我读到的东西没有很好的解释,也没有解释什么时候,如何管理回调。

最佳答案

也许看看这个: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);
}
}

关于带回调的 PHP 异步 cURL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26039848/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com