不确定这是否可能,但我正在尝试调用多个api,但我不希望用户等待调用完成。一旦他们提交了一个表单,我希望他们转到下一个页面(控制器中的next函数),并对api进行异步调用。仅供参考,我正在使用代码点火器框架。
PHP脚本本身是单线程的。有一些方法可以使用pcntl_fork函数在PHP中"分叉"子进程。到目前为止,我知道,这只适用于CLIsapi。
分流进程将导致请求被克隆到一个精确的复制副本中,尽管它有自己的地址空间。父进程和子进程(分叉)在分叉之前都是完全相同的,例如:在这一点之前,两个进程中的任何变量都将完全相同。分叉后,在一个进程中更改变量的值不会影响中的另一个进程
您也可以尝试curlmult_init。它允许异步处理多个cURL句柄。
另一种解决方案可能是pthreads。线程完成后,在原始线程中处理第二个线程的结果。如果需要在线程之间传输数据,或者通过synchronized()、notify()和wait()保持两个线程中几个步骤的执行同步,那么线程处理确实比多处理更具优势。
这样的东西应该可以工作。
基本上,您希望在提交时调用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
}
}
我认为解决方案是在下一页上进行几个Ajax调用。这些调用不需要直接转到API,而是转到服务器上调用API的多个代理PHP脚本。