2016-12-12 5 views
0

PHP - (私はPHPの初心者だから)私はGoogleが私が欲しい答えを与えるためにするために十分な、これは簡単な質問である知っているが、私はできないフレーズ私の質問

を受信HTTPポストをキューI PHPのいくつかのアプリケーション間の統合を書いています。 1つのアプリケーションはWebHookスタイルのHTTPポストを私のWebサーバー上の.phpファイルに出力して、それを処理して他のシステムに送信します。

おそらく各POSTは、いくつかの問題を提示する、非同期で実行されます。

  1. タスクが完了するまでに時間がかかり、サーバが
  2. ありますが処理できる以上のスレッドが 実行されている恐れがありますサービスのAPI呼び出し制限 データも投稿しようとしています。私は大量の投稿でそれらを十分に上回ることができました。

HTTPリクエストを「キューに入れる」簡単な方法はありますか?(POSTを本当に拒否することはできません。

私はリクエストを受け入れてデータベースに保存する(クイックタスク)と考えて、CRONタスクを使ってデータベースのレコードを繰り返し処理することを考えました。これはうまくいくが、乱雑に思える。

感謝 ベン

+0

サーバーが時間フレーズで多くのリクエストを処理できない場合、サーバーをリクエストにアップグレードまたは専用化する時間。 – KDOT

答えて

0

あなたは、低予算のプロジェクトに取り組んでいる場合は、ほとんどの十分な方法は、IMO cronジョブになります。

ペイロードをサーバーに送信する現在のアプリケーションは、代わりに要求エントリをデータベースに追加できます。要求を受け取ったサーバーは、cronジョブを1日X回実行するだけで、データベースエントリを繰り返し処理し、要求があったときにそのエントリを実行することができます。

これを行うことの正当な理由は、アクションが実行されたときにリクエストが開始されないことです。アクションを実行するには時間がかかります(cron-jobの実行頻度によって異なります)。

予算の低いプロジェクトで作業していない場合は、アップグレードする必要があります。

ここで最も簡単な解決策は、ペイロードを実行する必要があるときに実行することです。つまり、実行するプロセスが必要なときにいつでも要求を送信することです。サーバーがX時間/分ごとの要求数に制限され、制限になる場合は、アップグレードしてください。

+0

@KDOTにお返事ありがとうございます。予算があまりにも低いプロジェクトではありませんが、1日に最大15,000件のリクエストを処理できるようにしなければなりません。API呼び出しの制限内で作業する必要もあります。 CRON /データベースは良い選択肢のように思えますし、重複したリクエストをフィルタリングする方法もあります。 –

+0

データベースを介してリクエストをプッシュ/ポップし、スクリプトを実行してリクエストをフラッシュし、X秒/分/時間ごとに必要な処理を行うことができます:-) Jusはスクリプトの実行時間をこのようにしています@BenRees – KDOT

0

メッセージキューは、必要なものです。要求データを取得してメッセージキューに送信します。 Webプロセスはこの時点で終了し、リソースを解放し、接続を閉じます。メッセージは、コンシューマのプールによって処理される可能性があります。負荷を取るのに必要な数だけそれらを持たせることができます。 Webサーバーやサーバーインフラストラクチャを後でアップグレードする必要がない(タイムクリティカルなものに対応していないことを意味します)。

私はenqueueライブラリを提案します。 enqueue/fsやenqueue/dbal`のような単純なキュー転送からやりとりして、後の段階でRabbitMQやAmazonSQSに移行することができます。

関連する問題