PHP 异步任务


PHP Asynchronous Task

我正在研究可能涉及长时间运行任务的 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 脚本进一步处理提交的数据。 众所周知,我正在使用的第三方响应缓慢(进行几次跃点,并且已知需要几分钟才能响应)。

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

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

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