2010-11-21 3 views
16

fastcgi_finish_request() 사용 방법에 대한 간단한 예를 보여 줄 수 있습니까? 나는 googled하지만 그것의 일반적인 언급을 발견, 어떤 사람들은 그들이 성공적으로 그것을 사용하지만, 코드와 함께 하나의 예제를 찾을 수 없습니다.fastcgi_finish_request() 사용 방법에 대한 예제

예를 들어 PHP 개체가 있습니다. 브라우저에 응답을 보내려면 HTML을 생성하고 은 getResult()을 통해 HTML을 반환합니다. 그런 다음 결과를 표시합니다. 이처럼

:

$obj = new controller(); 
echo $o->getResult(); 

의 나는 어쩌면 페이스 북의 API와 같은 일부 API 연결과 같은 몇 가지 잠재적으로 긴 과정을 브라우저로 결과를 전송하고 마무리하기 위해 최적화 기법을 활용하기를 원하는 경우를 생각 해보자.

어떻게해야합니까? 나는 기본적으로 fastcgi_finish_request();을 호출하고 PHP 스크립트를 계속 실행할 수 있음을 이해합니다.

예제 코드를 살펴볼 필요가 있습니다. 나는 혼자 알아낼만큼 똑똑하지 않습니다.

+0

나는 그것이 php-fpm으로 fastcgi로 실행되는 PHP를 필요로한다는 것을 알고 있습니다. 나는 이미 웹 서버와 같이 fastcgi와 lighttpd로 php 5.3을 사용하여 이런 식으로 설정했다. – Dmitri

답변

35

기본적으로 나는 fastcgi_finish_request()를 호출 할 수 있음을 이해합니다. PHP 스크립트를 계속 실행하십시오.

네, 그게 전부입니다. 그것은이 작동 자신을 설득하기 위해

$obj = new controller(); 
echo $o->getResult(); 
fastcgi_finish_request(); 
do_facebook_thing(); 

는이 작업을 수행 : 두 번째 줄을 제거하면, 브라우저 10 초를 기다려야 것을 볼 수

echo "Test"; 
fastcgi_finish_request(); 
sleep(10); 

.

+1

좋은 예입니다. 나는 그것을 시도하고 그것은 효과가있다. – Dmitri

+0

그래서 백그라운드 작업을 수행하기 위해 asynchrone queuing 대신에 사용할 수 있습니다 (예를 들어 이메일 보내기)? –

+1

@ThomasDecaux, 가능하지만 작업이 실행되는 동안 웹 프로세스를 계속 보유하게됩니다. 궁극적으로 페이지 처리에 필요하지 않은 블로킹 작업을 위해 웹 프로세스에서 완전히 분리 된 적절한 대기열을 사용하는 것이 좋습니다. – Matthew

관련 문제