我有两个用户可以调用的脚本(A和B)。
如果用户调用A,我将进行大量数据库访问并检索结果以返回给用户。弄清楚需要发送回去的内容后,我将对数据库进行一些额外的处理和修改。
我想知道是否有可能将结果返回给用户,然后在某种后台任务中执行其余的处理。
另一个条件是,如果调用脚本A的用户然后调用脚本B,则由用户调用A触发的任何处理任务都必须完成,或者脚本B必须等待其完成。
有没有办法做到这一点?
在关闭请求后,php无法执行任务,因为该请求(以及发送到浏览器的响应)在php进程完成时实际上已关闭。
另外,php适用于短时间操作,而不适合长时间运行的程序(如守护程序),因为php缺少良好的垃圾收集器(因此,它在崩溃之前会耗尽所有可用的内存)。
您正在寻找的被称为队列。当您需要执行一些占用资源(或时间)的任务时,可以将任务放入队列。然后,工作进程将从队列中取出一项,然后执行任务。
这使您可以通过限制工作人员的数量来避免资源使用,以避免高峰和服务故障。
看一下resque(用于自托管解决方案)或iron.io(用于云,免费安装解决方案)
如果您在共享主机上(因此,没有队列且没有cron可用),那么我建议您查看iron.io推送队列。当队列不为空时,此类队列将调用您的服务器(通过HTTP)向其发送任务。这样,所有轮询/检查队列都在iron.io一侧完成,您只需要设置一个常规页面即可执行任务。
另外,如果希望脚本B等待脚本A完成,则必须创建某种锁定系统。但是,如果我是您,我会尽量避免这种情况,因为这可能会导致死锁(一个线程在等待另一个线程,但是另一个线程将永远无法完成,从而永远阻塞正在等待的线程)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句