ブラウザ等のクライアントからマイクロサービスモデルへリクエストする場合、マイクロサービス間で同期処理が行われるとクライアントへの応答が遅くなることがあります。
ここではPHPにおいてHTTPリクエストを非同期処理する方法を解説します。
以下のようにすると、HTTPリクエストを受けたPHPプロセスから別のプロセスを起動し、 HTTPリクエストを受けたPHPプロセス自体はクライアントへ処理を返すことができます。
山括弧<…>で囲まれている箇所は、ご自身の環境に合わせて書き換えて下さい。
$fp = popen('start <実行したいプロセスのフルパス>', 'r');
pclose($fp);
注意点
ビッグデータ処理や機械学習を行うケースで、数十分レベルの時間が掛かる場合、IISの以下の設定(アプリケーションプール > 当該サイトのアプリケーションプール > 詳細設定)に基づいてプロセスが強制終了されることがあります。
「アイドル タイムアウトの操作」を”Suspend”にして終了しないようにするか、「アイドル状態のタイムアウト (分)」の時間を延ばせばOKです。
コメント