今天小编给大家分享一下PHP Laravel框架异步执行如何实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
不影响当前程序继续执行
描述:用户操作时 要执行计算量大且不影响主操作的任务时,可采用异步方式执行。
队列的目的是将耗时的任务延时处理,比如发送邮件,从而大幅度缩短 Web 请求和响应的时间
生成要执行的文件 php artisan make:job UploadTask
.env 中的 QUEUE_CONNECTION=sync 变为 QUEUE_CONNECTION=redis
UploadTask文件里写入要执行的任务
启动任务队列 php artisan queue:work
在触发位置使用 dispatch(new UploadTask()); 开启队列
app/Jobs/UploadTask.php
<?php namespace App\Jobs; use Illuminate\Bus\Queueable; use Illuminate\Queue\SerializesModels; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Bus\Dispatchable; use Illuminate\Support\Facades\Log; class UploadTask implements ShouldQueue { use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; /** * Create a new job instance. * * @return void */ public function __construct() { //因为要导入大文件 需要很久时间 } /** * Execute the job. * * @return void */ public function handle() { Log::info('UploadTask'); $command = 'cd ' . base_path() . ' && php artisan ExcelFile '; $ret = shell_exec($command); Log::info('UploadTask-导入结束'.print_r($ret,true)); } }
启动代码摘取
$form->saved(function (Form $form) { dispatch(new UploadTask()); return $form->redirect('yyImport','保存成功'); });
因为是个人的电脑 随时会关机 queue就会被停掉 所以使用了windows的开机自启执行vbs
runReadExecelVbs.vbs
set ws = CreateObject("Wscript.Shell")
ws.run "cmd /c I:\yinyue\runReadExecel.bat",vbhide
runReadExecel.bat
cd I:\yinyue
php artisan queue:work
以上就是“PHP Laravel框架异步执行如何实现”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。