PHPLaravel框架异步执行的实现详解

Nissa ·
更新时间:2024-11-11
· 696 次阅读

目录

Laravel 异步执行任务

大致操作

代码粘贴

其他操作

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框架异步执行的实现详解的文章就介绍到这了,更多相关PHP Laravel异步执行内容请搜索软件开发网以前的文章或继续浏览下面的相关文章希望大家以后多多支持软件开发网!



异步执行 异步

需要 登录 后方可回复, 如果你还没有账号请 注册新账号