2015-02-05 1 views
0

이것이 가능한지 확실하지 않지만 여러 apis를 호출하려고하지만 사용자가 호출이 끝날 때까지 기다리지 않길 바랍니다. 일단 그들이 양식을 제출하면, 나는 그들에게 다음 페이지 (컨트롤러의 다음 함수)로 가서 apis에 대한 비동기 호출을하고 싶습니다. 참고 저는 codeigniter 프레임 워크를 사용하고 있습니다.Codeigniter : 컨트롤러에서 API 호출을 개별적으로 만듭니다.

+0

아약스를 사용할 수 있습니다. –

+0

아약스를 사용할 수 없다고 생각합니다. 만약 내가 아약스를 사용하고 있다면, 그 아약스 호출이 끝나는 동안 적어도 그 페이지에 있어야 할 것입니다. –

+0

그래서 사용자가 원하는 항목을 탐색하는 동안 다른 함수를 호출하는 경우 –

답변

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 
    } 

} 
1

PHP 스크립트는 단일 스레드입니다. pcntl_fork 기능을 사용하여 PHP에서 하위 프로세스를 포크하는 방법이 있습니다. 지금까지 내가 아는 한, 이것은 CLI sapi에서만 실제로 잘 작동합니다.

프로세스를 포크하면 고유 한 주소 공간을 가지고 있지만 요청이 정확한 복제본으로 복제됩니다. 상위 및 하위 (분기) 프로세스는 포크가 실행될 때까지 정확히 동일합니다 (예 : 해당 지점까지의 모든 변수는 두 프로세스에서 정확히 동일합니다). 분기 후에는 하나의 프로세스에서 변수 값을 변경해도 다른 프로세스에는 영향을주지 않지만

curl_multi_init을 시도 할 수도 있습니다. 비동기 적으로 여러 개의 cURL 핸들을 처리 할 수 ​​있습니다.

pthreads 일 수 있습니다. 스레드가 완료되면 원래 스레드에서 두 번째 스레드의 결과를 처리합니다. 스레드간에 데이터를 전송하거나 synchronized(), notify() 및 wait()를 통해 두 스레드에서 여러 단계의 실행을 동기화 된 상태로 유지해야하는 경우 스레딩은 실제로 멀티 프로세싱보다 우위를 점합니다.

+0

나는 포크를 사용하는 것을 좋아한다. 내 자식 프로세스가 컬링 호출을 끝내면 어떻게하면 내 프로세스에 영향을 미치지 않도록 프로세스를 종료 할 수 있습니까? exit() 프로세스를 완전히 종료합니까? –

+0

성공하면, 하위 프로세스의 PID가 상위 스레드의 실행 스레드에 리턴되고 하위 스레드의 실행 스레드에 0이 리턴됩니다.실패하면 -1이 부모의 컨텍스트에서 반환되고 자식 프로세스가 생성되지 않고 PHP 오류가 발생합니다. – sas

+0

부모가 자식 프로세스가 완료되기를 기다리는 것을 원하지 않습니다. –

0

해결책은 다음 페이지에서 여러 Ajax 호출을 작성하는 것입니다. 이 호출은 직접 API로가는 것이 아니라 API를 호출하는 서버의 다중 프록시 PHP 스크립트로 이동해야합니다.

관련 문제