PHP异步任务

Mik*_*e D 3 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
Run Code Online (Sandbox Code Playgroud)

怎么可能从我的服务器返回一个简单的JSON对象只是作为收据,并让我的PHP脚本进一步处理提交的数据.我知道我使用的第三方响应缓慢(做了几次跳跃,并且已知需要几分钟才能得到响应).

Ham*_*ish 6

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

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

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