怎样让php完成一个耗时任务,并且逐步返回处理状态?

我有个任务,比较耗时,客户端有个进度条,一个按钮。

图片描述

点击,开始任务,服务器端php就开始执行一个耗时任务,比如,php去抓取别的网站的100篇文章,每秒给客户端返回一个处理进度,或者设置成每20秒,返回给客户端,处理任务的进度。

或者任务是这样,去数据库创建1000个数据表,每10秒,返回给客户端,处理的进度。

像这样,php那边怎么能做到一次任务,多次返回给客户端。而不是做一次任务,最后才返回给客户端,任务执行的总进度。

每研究过这种的,大神给指点一下吧!

阅读 6.2k
4 个回答

队列

开始之后就把任务放入队列,任务在队列执行过程中将进度存入 redis 或者其他上面,然后前端用 ajax 轮询,去获取进度。
也可以建立 socket 让客户端更加能准确的获取到进度。

ajax异步试试,PHP每次运行完一步就把内容写入到一个JSON文件中,前端这边用AJAX轮询请求这个JSON文件并显示到页面上

简便的方式是在该页面放两个ajax异步请求。
请求a用于处理任务进度,并把实时进度放到文件缓存或redis里。处理任务的代码前要记得添加一句session_write_close(),防止请求阻塞。进度缓存值的key用任务标识+session_id。
请求b进行轮询用于获取任务进度,根据当前任务标识+session_id去缓存里获取当前对应的处理进度。

可以考虑长轮询或用websocket协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题