PHP异步任务

时间:2012-06-27 03:18:29

标签: php asynchronous

我正在处理可能涉及长时间运行任务的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脚本进一步处理提交的数据。我所知道的第三方响应速度很慢(进行多次跳跃,并且已知需要几分钟才能得到响应)。

1 个答案:

答案 0 :(得分:6)

虽然可以提前发送输出缓冲区并继续处理(参见Continue processing after closing connection),但它是一个hacky解决方案,不适合PHP请求生命周期。

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

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