3

我正在 Laravel 中开发一个可以通过 Curl 调用的 REST API。

API 的目的是根据请求参数生成文件,并在 JSON 响应中将这些文件作为 base64 字符串返回。生成过程受这些文件大小(范围从 0.5Mb 到 30Mb)的影响很大。整个过程(从请求到响应)平均需要 1 秒到 2 分钟。

这些 HTTP 请求应该由可以处理优先级队列的队列管理器(例如 gearman)处理。该管理器应该能够分配 2-3 个工作人员进行负载平衡。队列中最大文件的一个工作人员和较小的文件的 1-2 个工作人员。

我的问题是,这些请求不像典型的邮件队列,例如,您可以将请求排队,后台作业将处理它。我必须在获得结果文件后立即以相同的响应归还它们。

在这种情况下,您将如何实现队列?例如,我查看了 gearman,但我不明白如何在相同的 HTTP 响应中返回结果。

(对不起,如果我的问题不清楚,如果需要我会尝试更新它......)

更新:

我需要一个队列,因为可能有大量客户端同时请求大量文件,并且在同时运行几个大请求后服务器会崩溃。1. 只能有少量同时运行的进程(最多 3 个) 2. 不会​​因为服务器内存或 CPU 能力最大化而丢失任何进程 3. 应在队列上强制执行优先级以对小型进程公平与可以在几分钟内送达的大型食品相比,可以在几秒钟内送达。

我如何能够满足这些请求并拥有这个队列?那是我的问题。

4

1 回答 1

2

这里描述的方法是一个很好的例子,在我的情况下该怎么做:http: //www.adayinthelifeof.nl/2011/06/02/asynchronous-operations-in-rest/

于 2013-04-01T22:13:18.827 回答