我有3个API(www.api1.com,www.api2.com,www.api3.com),必须通过ajax curl调用,现在工作正常,但我意识到虽然api1没有完成api2进程将等到api1完成后,我怎么能让它成为并行呼叫(最快会显示)?
注意:我的意思是,我在PHP中有一些执行Curl的函数,函数是通过ajax调用的。
答案 0 :(得分:0)
如果您使用的是apache,则可能是配置问题。看看apache多线程。 Nginx可能更适合,但我还不是多线程部分的专家。我在使用Nginx时没有遇到任何问题,我有许多同时运行的虚拟服务器设置。如果XDEBUG已经建立并且正在监视每个虚拟Web服务器,它将阻止它们同时运行。
没有ajax curl这样的东西。每个浏览器都会以不同的方式实现ajax,而curl可能会在幕后使用,但是说ajax curl会让人感到困惑。你在javascript中使用ajax,并且可能在服务器端使用curl(或像Guzzle一样卷曲的抽象)来与其他服务器通信。
答案 1 :(得分:0)
mpyw/co提供了非常简单的基于cURL和生成器的解决方案。
function curl_init_with($url, array $options = [CURLOPT_RETURNTRANSFER => true])
{
$ch = curl_init($url);
curl_setopt_array($ch, $options);
return $ch;
}
$results = Co::wait([
curl_init_with('www.api1.com'),
curl_init_with('www.api2.com'),
curl_init_with('www.api3.com'),
]);
Co::wait([
function () {
var_dump(yield [
curl_init_with('www.api1.com'),
curl_init_with('www.api2.com'),
curl_init_with('www.api3.com'),
]);
},
function () {
var_dump(yield [
curl_init_with('www.api4.com'),
curl_init_with('www.api5.com'),
curl_init_with('www.api6.com'),
]);
},
]);