不确定这是否可行,但我正在尝试拨打多个api,但我不希望用户等待呼叫完成。一旦他们提交了表单,我希望他们转到下一页(控制器中的Next函数)并对apis进行异步调用。仅供参考我使用的是codeigniter框架。
答案 0 :(得分:1)
PHP脚本本身是单线程的。有方法可以" fork" PHP中的子进程使用pcntl_fork函数。到目前为止,我知道,这只适用于CLI sapi。
分叉进程将导致请求被克隆到精确的副本中,尽管它具有自己的地址空间。直到fork的那一刻,父和子(forked)进程都将完全相同,例如:到那时为止的任何变量在两个进程中都是完全相同的。分叉后,在一个过程中更改变量的值不会影响另一个过程
你也可以尝试curl_multi_init。它允许异步处理多个cURL句柄。
另一个解决方案可能是pthreads。在线程完成时,在原始线程中处理第二个线程的结果。如果在线程之间传输数据或通过synchronized(),notify()和wait()保持两个线程中的多个步骤的执行同步,则线程确实优于多处理。
答案 1 :(得分:0)
这样的事情应该有效。
基本上你想在提交时调用API。
API调用将具有代码,该代码可确保即使客户端不再侦听响应,脚本也会完成执行。
jQuery AJAX
$('form').on('submit', function(){
// call the API
$.get('www.yoursite.com/api_caller/callApi');
});
API致电
class Api_caller extends CI_Controller {
public function __construct(){
// Even if you navigate away from page then
// this script will finish
ini_set('ignore_user_abort', '1');
}
public function callApi ($name = '') {
// Call your API(s) with CURL
}
}
答案 2 :(得分:0)
我认为解决方案是在下一页上进行几次Ajax调用。 这些调用不需要直接转到API,而是转到服务器上调用API的多个代理PHP脚本。