我有个任务,比较耗时,客户端有个进度条,一个按钮。
点击,开始任务,服务器端php就开始执行一个耗时任务,比如,php去抓取别的网站的100篇文章,每秒给客户端返回一个处理进度,或者设置成每20秒,返回给客户端,处理任务的进度。
或者任务是这样,去数据库创建1000个数据表,每10秒,返回给客户端,处理的进度。
像这样,php那边怎么能做到一次任务,多次返回给客户端。而不是做一次任务,最后才返回给客户端,任务执行的总进度。
每研究过这种的,大神给指点一下吧!
我有个任务,比较耗时,客户端有个进度条,一个按钮。
点击,开始任务,服务器端php就开始执行一个耗时任务,比如,php去抓取别的网站的100篇文章,每秒给客户端返回一个处理进度,或者设置成每20秒,返回给客户端,处理任务的进度。
或者任务是这样,去数据库创建1000个数据表,每10秒,返回给客户端,处理的进度。
像这样,php那边怎么能做到一次任务,多次返回给客户端。而不是做一次任务,最后才返回给客户端,任务执行的总进度。
每研究过这种的,大神给指点一下吧!
简便的方式是在该页面放两个ajax异步请求。
请求a用于处理任务进度,并把实时进度放到文件缓存或redis里。处理任务的代码前要记得添加一句session_write_close(),防止请求阻塞。进度缓存值的key用任务标识+session_id。
请求b进行轮询用于获取任务进度,根据当前任务标识+session_id去缓存里获取当前对应的处理进度。
2 回答1.5k 阅读✓ 已解决
1 回答1.2k 阅读✓ 已解决
2 回答877 阅读✓ 已解决
1 回答1.1k 阅读✓ 已解决
2 回答934 阅读
1 回答915 阅读
1 回答845 阅读
队列
开始之后就把任务放入队列,任务在队列执行过程中将进度存入 redis 或者其他上面,然后前端用 ajax 轮询,去获取进度。
也可以建立 socket 让客户端更加能准确的获取到进度。