Codeigniter:使api调用独立于控制器


Codeigniter: Make api calls independent from the controller

不确定这是否可能,但我正在尝试调用多个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脚本。