素材牛VIP会员
php执行时间较长任务,怎么在web端输出实时结果
 阿***6  分类:PHP代码  人气:755  回帖:10  发布于6年前 收藏

php执行群发邮件、消息等任务,怎么样在web端输出实时的结果?

 标签:php

讨论这个帖子(10)垃圾回帖将一律封号处理……

Lv3 码奴
陈***子 PHP开发工程师 6年前#1

http://my.oschina.net/u/657911/blog/178677

Lv5 码农
h***o 交互设计师 6年前#2

有何不妥嗎?

可以參照 wordpress 在線安裝更新時採用的解決方案

Lv5 码农
wz***16 技术总监 6年前#3

可以使用flush函数来查看实时结果,或者打开ob缓存,然后使用ob_flushflush函数来将程序缓存强制刷新到浏览器查看结果。希望对你有用!

Lv5 码农
阿***7 产品经理 6年前#4

两种思路,一种是把多条任务分拆成单条任务,然后前端每次发一个请求,不过这种不是很靠谱,如果浏览器崩溃或者网络断掉就挂掉了。比较适合对任务的完整性要求不高,而且需要快速实现的场合。

另外一种思路就是后端做一个脚本异步接收任务队列,然后把任务完成的情况写入到一个缓存中,浏览器端通过每隔一段时间去取这个缓存结果来获知后端脚本的运行情况。

Lv3 码奴
ba***pc JAVA开发工程师 6年前#5

做成队列,慢慢执行,执行完成改状态,开一个页面查询最新执行完成的任务

Lv6 码匠
ja***ng 站长 6年前#6

最简单是每输出一次结果都进行flush,如果是nginx要把buffer设置得尽可能小

Lv5 码农
西***千 Linux系统工程师 6年前#7

web端=>任务队列<=定时脚本

根据经验,这种方式比较好

Lv7 码师
ph***16 JAVA开发工程师 6年前#8

一种方法是使用设置较长的执行时间并使用ob系列函数即时输出内容, 一种是Html5 Websocket + php socket

Lv1 新人
海***人 Web前端工程师 6年前#9

发送一条,浏览器刷新一次,继续执行下一条。url中记录执行到哪一步了,比如规定发送5封邮件为一步,xxx/send.php?step=1 执行完成后,页面刷新,跳转到xxx/send.php?step=2 ,依次类推。刚才踩我答案 ,基本可以判断为经验不足的菜鸟,连这种方案都没见过。

Lv5 码农
ah***xr 软件测试工程师 6年前#10

php + redis 任务队列 或 gearman

 文明上网,理性发言!   😉 阿里云幸运券,戳我领取