2010-11-21 15 views
16

fastcgi_finish_request()の使い方の簡単な例を表示できますか? 私はグーグルだが、それについての一般的な言及しか見つけられなかった。何人かの人々はそれをうまく使っていると言っているが、コードを使った単一の例は見つけられなかった。fastcgi_finish_request()の使用例の例

たとえば、私はPHPオブジェクトを持っています。ブラウザに応答を送信するには、HTMLを生成し、 getResult()で返信します。次に結果をエコーし​​ます。このよう

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

のは、私は多分、FacebookのAPIのように、いくつかのAPIに接続するようないくつかの潜在的に長いプロセスをブラウザに結果を送信して、最後の仕上げに、この最適化技術を利用したいとしましょう。

どうすればいいですか?私は基本的にfastcgi_finish_request();と呼ぶことができると理解し、PHPスクリプトの実行を続けます。

サンプルコードを見るだけで、私は自分でそれを理解するほどスマートではありません。

+0

私はそれがphp-fpmでfastcgiとして動作するphpを必要としていることを知っています。私はすでに、Webサーバとしてfastcgiとlighttpdとしてphp 5.3を使用して、このように設定しています。 – Dmitri

答えて

35

私は基本的に私がfastcgi_finish_request()を呼び出すことができると理解しています。 PHPスクリプトの実行を続けます。

はい、これだけです。 2番目の行を削除した場合、あなたはブラウザが10秒を待たなければならないことがわかります

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

:これを行う、それが働いている自分を納得させるために

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

+1

良い例。私はそれを試して、それは働いた。 – Dmitri

+0

"バックグラウンドジョブ"を行うためにasynchrone queuingの代わりに使うことができます(例えば電子メールを送る)? –

+1

@ThomasDecauxでも可能ですが、そのタスクが実行されている間はWebプロセスを保持しています。最終的には、ページを処理するために必要でないブロッキング操作のために、Webプロセスから完全に切り離された適切なキューを使用することは価値があります。 – Matthew