ホームページ >バックエンド開発 >PHPチュートリアル >PHP ノンブロッキング モード
PHP ノンブロッキング モード
by Chenyuan on July 31st, 2014 // Filed Under → php
PHP をバックエンド処理として使用する場合、長期的な処理を完了する必要があります。ページリクエストに素早く応答するために、結果返還判定は行われません:
1. FastCGI モードを使用している場合、fastcgi_finish_request() を使用するとセッションを即時に終了できますが、PHP はセッションを終了します。スレッドは実行を続けます。
ヘルプ
01 02 03 04 05 06 07 08 09 10 |
echo "プログラム開始。"; file_put_contents('log.txt','start-time:'.date('Y-m-d H:i:s'), FILE_APPEND); fastcgi_finish_request() echo 'デバッグ...'; file_put_contents('log.txt','start-proceed:'.date('Y-m-d H:i:s'), FILE_APPEND); file_put_contents('log.txt','end-time:'.date('Y-m-d H:i:s'), FILE_APPEND); この例の出力は、出力プログラムの後に見ることができます。セッションが返されるため、デバッグ出力ブラウザはセッションを受信できませんが、log.txt ファイルは 3 つの完了時間をすべて受信できます。 2. fsockopen と cUrl のノンブロッキング モードを使用して別の URL をリクエストします
ヘルプ
1 |
4
56
7
8
$fp=fsockopen("www.example.com", 80,$errno,$errstr, 30); if(!$fp)die('error fsockopen'); stream_set_blocking($) fp, 0); $http="GET /save.php / HTTP/1.1rn"; $http.="ホスト: www.example.comrn"; ; fwrite($fp,$http)
cURL でcurl_multi_* 関数を使用して非同期リクエストを送信する
ヘルプ
この方法は、トラフィックの多い一般的なアーキテクチャでは非常に一般的です
1
|