Home > Article > Backend Development > php执行时间较长任务,怎么在web端输出实时结果
php执行群发邮件、消息等任务,怎么样在web端输出实时的结果?
php执行群发邮件、消息等任务,怎么样在web端输出实时的结果?
两种思路,一种是把多条任务分拆成单条任务,然后前端每次发一个请求,不过这种不是很靠谱,如果浏览器崩溃或者网络断掉就挂掉了。比较适合对任务的完整性要求不高,而且需要快速实现的场合。
另外一种思路就是后端做一个脚本异步接收任务队列,然后把任务完成的情况写入到一个缓存中,浏览器端通过每隔一段时间去取这个缓存结果来获知后端脚本的运行情况。
php + redis 任务队列 或 gearman
可以使用flush
函数来查看实时结果,或者打开ob缓存,然后使用ob_flush
和flush
函数来将程序缓存强制刷新到浏览器查看结果。希望对你有用!
一种方法是使用设置较长的执行时间并使用ob系列函数即时输出内容, 一种是Html5 Websocket + php socket
最简单是每输出一次结果都进行flush,如果是nginx要把buffer设置得尽可能小
做成队列,慢慢执行,执行完成改状态,开一个页面查询最新执行完成的任务
web端=>任务队列
根据经验,这种方式比较好
http://my.oschina.net/u/657911/blog/178677
有何不妥嗎?
可以參照 wordpress 在線安裝更新時採用的解決方案
发送一条,浏览器刷新一次,继续执行下一条。url中记录执行到哪一步了,比如规定发送5封邮件为一步,xxx/send.php?step=1 执行完成后,页面刷新,跳转到xxx/send.php?step=2 ,依次类推。刚才踩我答案 ,基本可以判断为经验不足的菜鸟,连这种方案都没见过。