이것이 가능한지 확실하지 않지만 여러 apis를 호출하려고하지만 사용자가 호출이 끝날 때까지 기다리지 않길 바랍니다. 일단 그들이 양식을 제출하면, 나는 그들에게 다음 페이지 (컨트롤러의 다음 함수)로 가서 apis에 대한 비동기 호출을하고 싶습니다. 참고 저는 codeigniter 프레임 워크를 사용하고 있습니다.Codeigniter : 컨트롤러에서 API 호출을 개별적으로 만듭니다.
답변
이와 비슷한 것이 작동해야합니다.
기본적으로 제출할 때 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
}
}
PHP 스크립트는 단일 스레드입니다. pcntl_fork 기능을 사용하여 PHP에서 하위 프로세스를 포크하는 방법이 있습니다. 지금까지 내가 아는 한, 이것은 CLI sapi에서만 실제로 잘 작동합니다.
프로세스를 포크하면 고유 한 주소 공간을 가지고 있지만 요청이 정확한 복제본으로 복제됩니다. 상위 및 하위 (분기) 프로세스는 포크가 실행될 때까지 정확히 동일합니다 (예 : 해당 지점까지의 모든 변수는 두 프로세스에서 정확히 동일합니다). 분기 후에는 하나의 프로세스에서 변수 값을 변경해도 다른 프로세스에는 영향을주지 않지만
curl_multi_init을 시도 할 수도 있습니다. 비동기 적으로 여러 개의 cURL 핸들을 처리 할 수 있습니다.
pthreads 일 수 있습니다. 스레드가 완료되면 원래 스레드에서 두 번째 스레드의 결과를 처리합니다. 스레드간에 데이터를 전송하거나 synchronized(), notify() 및 wait()를 통해 두 스레드에서 여러 단계의 실행을 동기화 된 상태로 유지해야하는 경우 스레딩은 실제로 멀티 프로세싱보다 우위를 점합니다.
나는 포크를 사용하는 것을 좋아한다. 내 자식 프로세스가 컬링 호출을 끝내면 어떻게하면 내 프로세스에 영향을 미치지 않도록 프로세스를 종료 할 수 있습니까? exit() 프로세스를 완전히 종료합니까? –
성공하면, 하위 프로세스의 PID가 상위 스레드의 실행 스레드에 리턴되고 하위 스레드의 실행 스레드에 0이 리턴됩니다.실패하면 -1이 부모의 컨텍스트에서 반환되고 자식 프로세스가 생성되지 않고 PHP 오류가 발생합니다. – sas
부모가 자식 프로세스가 완료되기를 기다리는 것을 원하지 않습니다. –
해결책은 다음 페이지에서 여러 Ajax 호출을 작성하는 것입니다. 이 호출은 직접 API로가는 것이 아니라 API를 호출하는 서버의 다중 프록시 PHP 스크립트로 이동해야합니다.
- 1. 다른 API를 호출하는 Codeigniter - API 호출을 넣을 위치
- 2. CodeIgniter 컨트롤러에서 함수 만들기
- 3. Codeigniter, 컨트롤러에서 set_checkbox 사용하기
- 4. CodeIgniter 컨트롤러에서 var_dump하는 방법
- 5. 동적으로 함수 호출을 만듭니다.
- 6. 각 행 om 테이블을 반복하고 API 호출을 만듭니다.
- 7. 이름이있는 그리드 뷰를 개별적으로 하이퍼 링크로 만듭니다.
- 8. CodeIgniter - 컨트롤러 기능 호출을 끕니까?
- 9. codeigniter 다른 컨트롤러에서 호출하여보기 내에서보기를로드하십시오.
- 10. 컨트롤러에서 PHPUnit Doctrine 오류 CodeIgniter
- 11. CodeIgniter 컨트롤러에서 Colorbox를 닫는 방법
- 12. CodeIgniter 컨트롤러에서 SSH 연결 설정
- 13. CodeIgniter 컨트롤러에서 date_diff로 문자열 전달
- 14. Codeigniter : 컨트롤러에서 라이브러리를 사용하고 있습니까?
- 15. 다른 컨트롤러에서 Codeigniter 액세스 기능
- 16. 컨트롤러에서 모델의 변수 사용하기 - CodeIgniter
- 17. Yii의 컨트롤러에서 생성자 메서드를 만듭니다.
- 18. CodeIgniter Rest API + Facebook SDK
- 19. angularJS- 컨트롤러에서 HTTP 호출을 시작하지 못했습니다.
- 20. Codeigniter 및 Facebook API
- 21. CodeIgniter | 구글 맵 API
- 22. 출력 XML 파일 | CodeIgniter API (
- 23. CodeIgniter RESTful API 라이브러리 응답
- 24. AJAX 호출을 사용하여 Symfony2 컨트롤러에서 JSONP 반환
- 25. 호출을 확인하는 방법은 특정 하위 컨트롤러에서 무엇입니까?
- 26. 컨트롤러에서 메소드 호출을 위해 routes.rb를 조정하십시오.
- 27. Codeigniter A3M 인증을위한 데이터베이스 호출을 줄입니다.
- 28. Webhook 호출을 CodeIgniter 앱에 인증 하시겠습니까?
- 29. Codeigniter PHPExcel ajax 호출을 통해 다운로드
- 30. codeigniter 컨트롤러에서 ajax 응답을받는 방법은 무엇입니까?
아약스를 사용할 수 있습니다. –
아약스를 사용할 수 없다고 생각합니다. 만약 내가 아약스를 사용하고 있다면, 그 아약스 호출이 끝나는 동안 적어도 그 페이지에 있어야 할 것입니다. –
그래서 사용자가 원하는 항목을 탐색하는 동안 다른 함수를 호출하는 경우 –