3

我正在处理可能涉及长时间运行任务的 php 脚本。过程是这样的,用户(在我的情况下使用 iOS 应用程序)将数据提交到我的 Web 服务。部分过程需要我的 php 脚本联系第三方来验证一些提交的数据。客户端(在 iPad 上)无需等待第三方的响应。

伪代码:

Pull values from _POST[]
some simple validation
if _POST[] values are good
    return success to client
    further process submitted data with thrd party
    update database
else
    return error code and message

怎么可能从我的服务器返回一个简单的 JSON 对象仅作为收据,并让我的 php 脚本进一步处理提交的数据。众所周知,我使用的第三方响应速度很慢(跳了几跳,并且已知需要几分钟才能响应)。

4

1 回答 1

6

虽然您可以提前发送输出缓冲区并继续处理(请参阅关闭连接后继续处理),但它是一个 hacky 解决方案,不适合 PHP 请求生命周期。

更好的方法是创建处理队列。当客户端点击您的服务时,您返回成功状态并在队列中插入处理请求(例如,在数据库表/键值存储等中)。一个单独的进程(例如,运行 CLI 脚本的 cron 作业)获取任务并先入先出地执行它们。这允许长时间运行的脚本在带外执行——甚至可能在不同的服务器上执行。

顺便说一句,即使客户端需要检查长时间运行的进程的结果,这也允许您释放 Web 服务器以处理更多请求。客户端可以轮询服务器以检查作业是否完成,并在准备好时获得完整的响应。

于 2012-06-27T03:26:53.680 回答