#1 如果一个 action 需要执行很长时间 但其实中间是有输出的 我希望有输出时就立马能在浏览器能看到 而不是等所有 action 代码都执行完 再 render view 我才能看到输出 有没有 disable view 的方法?
#2 有没有谁用 voyager,能不能在特定 action 里 disable 掉它的侧边栏 就是菜单
1
yangqi 2018-03-10 09:22:09 +08:00
如果一个 action 要执行很长时间那就不应该有 view, 更适合用异步的 queue 和 job
|
2
choulinlin OP @yangqi 我就是想 disable view 只有一个人同时执行这个 action 目前我是把 action 输出到 log 再 ajax 定时 去读取 log 再在 view 里显示
上次找了下 没找到怎么 disable view |
3
yangqi 2018-03-10 09:34:21 +08:00
你这个就不应该放在 controller 和 action 里面,直接用 queue 和 job 后台处理
|
4
carlclone 2018-03-10 09:34:33 +08:00
Laravel Echo 适合你
|
5
choulinlin OP @yangqi 你觉得难道我连这都不知道吗 ?
要 action 就是人为执行 |
6
choulinlin OP @carlclone 感谢 试试看
|
7
yangqi 2018-03-10 09:55:57 +08:00
@choulinlin 你没懂我意思?人为执行然后放到 queue 里面后台 job 进行处理,有什么问题?
|
8
mrcn 2018-03-10 10:35:02 +08:00 via Android
直接 echo 数据,不用 view
|
9
MeteorCat 2018-03-10 10:43:47 +08:00 via Android
这个方案以前我们以前遇到过,业务场景是需要云打包服务,利用 PHP 进行对 jar 打包,因为 jar 打包时间很长,所以不能一直让用户卡顿在页面之中,我们的方案是直接点击之后,发所需的数据发到 ActiveMQ,客户页面直接返回'正在打包,请等待系统通知'之后,后台跑脚本 ActiveMQ 取出数据构建 jar 包完成之后推送一条消息给客户端让他接收这样,不知道这种方案适不适应题主所说的情况
|
10
Clarencep 2018-03-10 12:23:50 +08:00 1
1. 时间短于 30 秒的任务建议直接 echo 输出,echo 后面最好加个 flush(),action 最后不要 return 任何东东
2. 更长的任务建议放队列里面执行,通过日志文件或数据库之类保存任务进度,然后另外写个查询任务进度的接口,前台轮询进度并显示给用户(当然你不保存进度,不显示进度,只显示个“正在处理...”也行,就是用户可能会 mmp ) |
11
choulinlin OP @Clarencep 原来加 ob_implicit_flush 就好了 哎
|
13
choulinlin OP @lifespy 总是能遇到自以为高手 贬低别人
|
14
lifespy 2018-03-10 13:08:21 +08:00
@choulinlin #13 你可能误解我的意思
|
15
choulinlin OP @lifespy 你的意思很明白 能这样发言的 也应该入行不深
|
16
MeteorCat 2018-03-10 13:46:07 +08:00 via Android
12 楼层主语气没问题,但是 13 楼题主这样回复,我感觉可能你对所谓“贬低”有什么误解?
|
17
choulinlin OP @MeteorCat 那是因为你也是跟他一样以为的
好了 结贴 鄙人早就不再讨论技术了 |