3

Curl から呼び出すことができる REST API を Laravel で開発しています。

API の目的は、リクエスト パラメータに基づいてファイルを生成し、それらのファイルを JSON レスポンスで base64 文字列として返すことです。生成プロセスは、これらのファイルのサイズ (0.5Mb から 30Mb の範囲) に大きく影響されます。プロセス全体 (要求から応答まで) には、平均で 1 秒から最大 2 分かかります。

これらの HTTP 要求は、プライオリティ キューを処理できるキュー マネージャー (gearman など) によって処理される必要があります。このマネージャーは、負荷分散のために 2 ~ 3 人のワーカーを割り当てることができるはずです。キュー内の最大のファイルには 1 つのワーカー、小さいファイルには 1 ~ 2 のワーカー。

私の問題は、これらの要求が、たとえば、要求をキューに入れることができ、バックグラウンド ジョブがそれを処理する典型的なメール キューとは異なることです。結果のファイルを取得したらすぐに、同じ応答で返さなければなりません。

この状況でキューをどのように実装しますか? たとえば、ギアマンを見てきましたが、同じ HTTP 応答で結果を返す方法がわかりません。

(私の質問が明確でない場合は申し訳ありませんが、必要に応じて更新しようとします...)

アップデート:

大量のクライアントが同時に大量のファイルを要求する可能性があり、同時にいくつかの大きな要求を実行するとサーバーがクラッシュする可能性があるため、キューが必要です。1. 同時に実行できるプロセスは少量 (最大 3 つ) のみです。 2. サーバー メモリまたは CPU パワーを使い果たしたためにプロセスが失われることはありません。数分で提供できる大きなものと比較して、数秒で提供できます。

これらのリクエストを処理し、このキューを保持するにはどうすればよいですか? それが私の質問です。

4

1 に答える 1

2

ここで説明する方法は、私の場合の良い例です: http://www.adayinthelifeof.nl/2011/06/02/asynchronous-operations-in-rest/

于 2013-04-01T22:13:18.827 に答える