2017-10-06 6 views
0

私は、要求を受け入れて処理するアプリケーションを持っています。私はカール経由でこの要求の転送が遅くないことを確認したいcurlを追加するとスクリプトがブロックされたり遅くなり、サーバー上で処理が実行される可能性はありますか?

(サービスの移行およびテストの目的のために)別のサービスにコールを転送するために、このスクリプトの実行にカールを追加する予定です

アプリケーションのパフォーマンスやサーバーの一般的なダウン。

いくつかの擬似コード:

//Step 1: existing code 

//handle the request 
$req = new requestHandler($_REQUEST); 
//process the request 
$req->process(); 


//Step 2 (TODO): add request forwarding here (unique request do not need to perform multi curls) 
$forward = new requestForwarding($_REQUEST); 
$forward->fire(); 

//step3 (don't want this to be delayed by step 2) 
$req->printAnswer(); 

は私が転送要求の一般的なインパクトに影響を与えたり、最小化しないようにステップ2で何ができますか?

私は何も心配していません。簡単なカールで実装できますか? また、予防措置を取るべきですか?

ありがとうございました

+0

これはすべて、リクエストを転送しているサービスによって異なります。 –

答えて

0

PHP順番に実行します。長時間実行されているコードは、エンドユーザー(Webブラウザ)への出力をブロックします。したがって、カールコールが4秒かかる場合、ヘッダーがクライアントに送信されるまでに4秒以上かかることになります。

これを回避するには数字の方法があります。これをジョブキューに追加して、cronジョブから実行することで実現します。あなたはPHP-FPMのように、スタンドアローンとしてPHPを実行している場合は

、あなたは彼らが応答をブロックしたいいけない場合あなたはまた、これらの要求を処理し、作業者を設定することができfastcgi_finish_request

のようなものを使用することができますクライアントに送信します。

これ以上の解決策があるかもしれません。ちょうど私が知っていることのいくつかを言及。

0

標準的なCURL機能を使用すると、インフラストラクチャ全体(サーバーへの接続、要求されたサーバーの速度など)によっては、実際にはスクリプトが遅くなる可能性があります。あなたの要求されたサーバが安定していて、同じネットワークであれば、あまり心配しているかもしれません。

$req->printAnswer(); 

がかなったを必要とする場合

。手順2の要求から、選択肢がありません。

がない場合は、あなたのためのいくつかの可能性があります。

  • オレHaugsetはただ一つの可能​​性を提供しました。
  • 手順2と3の順序を変更することは可能でしょうか?
  • 要求のキューで動作し、遅れてはいけないスクリプトの一部ではないクロムジョブを追加します。
  • は、Async curl request in PHP

わずか数の考えを参照カール非同期に実行するために(高度)の可能性があります。

0

入出力操作がある場合、これは外部サイトに要求を行い、実行をブロックする場合です。スクリプトの種類に依存して...非同期的に行うことができます。このための良いオプションはGuzzleClientを使用し、非同期モードに設定することです。 http://docs.guzzlephp.org/en/stable/

関連する問題