この記事では、PHP の fastcgi_finish_request とそのノンブロッキング コードについて紹介します。これには一定の参考値があります。必要な友人は参照できます。お役に立てれば幸いです。
まえがき
実際のプロジェクトでは、フロントエンドから送信されたリクエストをバックエンドで長時間処理する必要があるが、ユーザーに提供するためにはこのような要望がよくあります。エクスペリエンスを向上させるため、バックエンドで長期タスクを処理するときに PHP がブロックされるのを防ぎ、ページ要求に迅速に応答するために、fastcgi_finish_request のアプリケーションをここにまとめます。もちろん、PHP でノンブロッキングを実装するには、非同期スクリプトや swoole など、さまざまな方法がありますが、個人的には fastcgi_finish_request が最もシンプルで便利だと思います。
基本アプリケーション
fastcgi_finish_request の概要
(PHP 5 >= 5.3.3, PHP 7)
fastcgi_finish_request — すべての応答データをクライアントにフラッシュします
boolean fastcgi_finish_request (void)この関数は、クライアントへのすべての応答データをフラッシュし、リクエストを終了します。これにより、実行に長時間かかるタスクは、クライアントが接続を終了した後も実行を継続できます。
戻り値
成功した場合は TRUE を返し、失敗した場合は FALSE を返します
注意事項
PHP および Web サーバーは If を使用しますPHP-FPM (FastCGI Process Manager) がインストールされているため、fastcgi_finish_request() 関数を通じてセッションを即座に終了でき、PHP スレッドはバックグラウンドで実行を継続できます。つまり、この関数は php-fpm のプロセス管理メソッドでのみ使用できます。
コードがこの場所まで実行されている限り、リクエストは切断されており、パラメーターはクライアントに返却されました。次のコードはクライアントとは関係がありません。つまり、ページ上のコンテンツ出力は fastcgi_finish_request 関数の前に配置する必要があります
fastcgi_finish_request() がクライアント接続を終了した後も、実行時間は max_execution_time タイムアウトの影響を受けます。つまり、バックエンドでのコードの実行に長時間かかることが予想される場合でも、set_time_limit(0)
を設定する必要があります。同時実行性が高い状態で長すぎると、fastcgi プロセスが十分に使用されず、時間内に解放できなくなり、502 エラーが発生します。
#適用echo "program start...";
file_put_contents('/tmp/garylog.log','start-time:'.date('Y-m-d H:i:s')."\n", FILE_APPEND);
fastcgi_finish_request();sleep(1);
// set_time_limit(0);
// sleep(150);
$num = 25;
$num += 1;
sleep(5);
echo 'debug...';
file_put_contents('/tmp/garylog.log', 'start-proceed:'.$num.',时间'.date('Y-m-d H:i:s')."\n", FILE_APPEND);
sleep(10);
file_put_contents('/tmp/garylog.log', 'end-time:'.date('Y-m-d H:i:s')."\n", FILE_APPEND);
テストの実行
#コードの移植性の観点から、次のコードをコードに添付できます:
if (!function_exists("fastcgi_finish_request")) { function fastcgi_finish_request() { } }
非 fpm 環境でコードのデプロイメントによって問題が発生することはありません。
プロセスが単一プロセスで実行されることを確認します。
上記の問題について: 高速環境下での過剰な実行時間同時実行により、fastcgi の処理も不十分になり、リリースが間に合わなくなります。同時に、要件はトリガーのみであり、毎回実行する必要はないため、プロセスの重複を避けるために次の方法を使用することを検討できます。
$processId = realpath(__FILE__) . '-' . get_class($this); $filename = md5($processId); $file = '/tmp/'.$filename; if(!file_exists($filename)){ file_put_contents($file, getmypid()); }else{ return true; } ## do somthing 需要长时间处理的代码 //处理完成后删除进程id记录文件 unlink($file);
関連する推奨事項:
php の魔法の fastcgi_finish_request
#PHP では、fastcgi_finish_request() 関数を使用して非同期操作を実装し、応答速度の向上
以上がphp の fastcgi_finish_request とそのノンブロッキング コードの紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

PHPは主に手順プログラミングですが、オブジェクト指向プログラミング(OOP)もサポートしています。 Pythonは、OOP、機能、手続き上のプログラミングなど、さまざまなパラダイムをサポートしています。 PHPはWeb開発に適しており、Pythonはデータ分析や機械学習などのさまざまなアプリケーションに適しています。

PHPは1994年に発信され、Rasmuslerdorfによって開発されました。もともとはウェブサイトの訪問者を追跡するために使用され、サーバー側のスクリプト言語に徐々に進化し、Web開発で広く使用されていました。 Pythonは、1980年代後半にGuidovan Rossumによって開発され、1991年に最初にリリースされました。コードの読みやすさとシンプルさを強調し、科学的コンピューティング、データ分析、その他の分野に適しています。

PHPはWeb開発と迅速なプロトタイピングに適しており、Pythonはデータサイエンスと機械学習に適しています。 1.PHPは、単純な構文と迅速な開発に適した動的なWeb開発に使用されます。 2。Pythonには簡潔な構文があり、複数のフィールドに適しており、強力なライブラリエコシステムがあります。

PHPは、多数のWebサイトとアプリケーションをサポートし、フレームワークを通じて開発ニーズに適応するため、近代化プロセスで依然として重要です。 1.PHP7はパフォーマンスを向上させ、新機能を紹介します。 2。Laravel、Symfony、Codeigniterなどの最新のフレームワークは、開発を簡素化し、コードの品質を向上させます。 3.パフォーマンスの最適化とベストプラクティスは、アプリケーションの効率をさらに改善します。

phphassiblasifly-impactedwebdevevermentandsbeyondit.1)itpowersmajorplatformslikewordpratsandexcelsindatabase interactions.2)php'sadaptableability allowsitale forlargeapplicationsusingframeworkslikelavel.3)

PHPタイプは、コードの品質と読みやすさを向上させるためのプロンプトがあります。 1)スカラータイプのヒント:php7.0であるため、基本データ型は、int、floatなどの関数パラメーターで指定できます。 3)ユニオンタイプのプロンプト:PHP8.0であるため、関数パラメーターまたは戻り値で複数のタイプを指定することができます。 4)Nullable Typeプロンプト:null値を含めることができ、null値を返す可能性のある機能を処理できます。

PHPでは、クローンキーワードを使用してオブジェクトのコピーを作成し、\ _ \ _クローンマジックメソッドを使用してクローン動作をカスタマイズします。 1.クローンキーワードを使用して浅いコピーを作成し、オブジェクトのプロパティをクローン化しますが、オブジェクトのプロパティはクローニングしません。 2。\ _ \ _クローン法は、浅いコピーの問題を避けるために、ネストされたオブジェクトを深くコピーできます。 3.クローニングにおける円形の参照とパフォーマンスの問題を避けるために注意し、クローニング操作を最適化して効率を向上させます。

PHPはWeb開発およびコンテンツ管理システムに適しており、Pythonはデータサイエンス、機械学習、自動化スクリプトに適しています。 1.PHPは、高速でスケーラブルなWebサイトとアプリケーションの構築においてうまく機能し、WordPressなどのCMSで一般的に使用されます。 2。Pythonは、NumpyやTensorflowなどの豊富なライブラリを使用して、データサイエンスと機械学習の分野で驚くほどパフォーマンスを発揮しています。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

SublimeText3 中国語版
中国語版、とても使いやすい

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール
