PHP Laravel框架异步执行的实现详解

目录
  • 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异步执行内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • laravel 解决ajax异步提交数据,并还回填充表格的问题

    小白一个,经过一晚百度,暂时想出来的方法 我就直接图片了 不喜勿喷, 首先我用bootstraptable 简单创建一个表格 ajax 用post提交数据 创建路由和控制器 路由: 路由里面我加前缀和中间件,也可以不加,这laravel的基础,我就不说了(本人很懒) 控制器: 附图:提交的数据表单 每点击一下按钮,就添加一行 以上这篇laravel 解决ajax异步提交数据,并还回填充表格的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • PHP的Laravel框架中使用消息队列queue及异步队列的方法

    queue配置 首先说明一下我之前的项目中如何使用queue的. 我们现在的项目都是用的symfony,老一点的项目用的symfony1.4,新一点的项目用的都是symfony2.symfony用起来整体感觉还是很爽的,尤其symfony2,整体上来讲使用了很多java里面框架的设计思想.但是他不支持queue.在symfony,我们使用queue也经历了几个过程.最开始使用张堰同学的httpsqs.这个简单使用,但是存在单点.毕竟我们的项目还是正式对外服务的,所以我们研究了Apache旗下的开

  • PHP框架Laravel中实现supervisor执行异步进程的方法

    问题描述 大家在使用Laravel框架实现动态网页时,若有些操作计算量较大,为了不影响用户体验,往往需要使用异步方式去处理.这里使用supervisor和laravel自带的queues实现.下面来看看详细的介绍: Supervisor Supervisor (http://supervisord.org) 是一个用 Python 写的进程管理工具,可以很方便的用来启动.重启.关闭进程(不仅仅是 Python 进程).除了对单个进程的控制,还可以同时启动.关闭多个进程,比如很不幸的服务器出问题导

  • laravel异步监控定时调度器实例详解

    定时调度器是什么 laravel默认提供了一个命令定时任务的功能,在其他的php框架下面,没有这个定时任务,我们要跑一些异步脚本怎么操作呢,只能依赖我们系统提供的crontab来做,这就导致我们每次发版本新增定时任务都要去服务器更改crontab代码,获取更新这个配置. 执行命令是php artisan schedule:run 来执行,那放在哪里执行呢,没错这个调起还是需要依赖我们crontab来执行,但是只需要配置一次,后续所有定时任务都在我们业务代码进行控制 场景 我们有一个导入数据的定时

  • PHP Laravel框架异步执行的实现详解

    目录 Laravel 异步执行任务 大致操作 代码粘贴 其他操作 Laravel 异步执行任务 不影响当前程序继续执行 描述:用户操作时 要执行计算量大且不影响主操作的任务时,可采用异步方式执行. 队列的目的是将耗时的任务延时处理,比如发送邮件,从而大幅度缩短 Web 请求和响应的时间 大致操作 生成要执行的文件 php artisan make:job UploadTask .env 中的 QUEUE_CONNECTION=sync 变为 QUEUE_CONNECTION=redis Uplo

  • laravel框架邮箱认证实现方法详解

    本文实例讲述了laravel框架邮箱认证实现方法.分享给大家供大家参考,具体如下: 修改 User 模型,将 Laravel 自带的邮箱认证功能集成到我们的程序中 <?php namespace App\Models; use Illuminate\Notifications\Notifiable; use Illuminate\Auth\MustVerifyEmail as MustVerifyEmailTrait; use Illuminate\Foundation\Auth\User as

  • Laravel框架使用Redis的方法详解

    本文实例讲述了Laravel框架使用Redis的方法.分享给大家供大家参考,具体如下: 安装 laravel中使用redis首先需要你通过 Composer 安装 predis/predis 包: composer require predis/predis 配置 redis的配置文件是:config/database.php 'redis' => [ 'client' => 'predis', 'default' => [ 'host' => env('REDIS_HOST',

  • Laravel框架实现多数据库连接操作详解

    本文实例讲述了Laravel框架实现多数据库连接操作.分享给大家供大家参考,具体如下: 这篇文章介绍了在laravel中连接2个数据库的方法 一.定义连接 进入到数据库配置文件 app/config/database.php 中,你可以定义多个形式相同或不同的数据库连接.例如,你想从2个 MYSQL 数据中抓取资料到你的程式中,你可以这样定义: <?php return array( 'default' => 'mysql', 'connections' => array( # Our

  • Laravel框架创建路由的方法详解

    本文实例讲述了Laravel框架创建路由的方法.分享给大家供大家参考,具体如下: 我这里使用的Laravel版本是5.6,路由位置在routes/web.php中,所以我们在这个文件中添加我们想要添加的路由. 1.基础路由 //get请求,结果如下图 Route::get('basic1',function (){ return 'Hello World'; }); //post请求,这里不展示结果图 Route::post('basic2',function (){ return 'Post'

  • Laravel框架DB facade数据库操作详解

    本文实例讲述了Laravel框架DB facade数据库操作.分享给大家供大家参考,具体如下: 前两篇文章我们讲述了Laravel下载介绍路由和MVC几个知识点,这篇我们就来讲述一下关于数据库的操作,有关于数据库的增删改查 创建数据库 在这里,我们需要用到的有两个文件,第一个是congfig目录下的database.php,以及Laravel目录下的env文件 如下图: 然后创建数据库这里,我用的是xampp的mysql数据库,phpMyAdmin 我们创建一个数据库,命名为laravel,如下

  • Laravel框架路由与MVC实例详解

    本文实例讲述了Laravel框架路由与MVC.分享给大家供大家参考,具体如下: 1.路由 路由的作用就是将用户的不同url请求转发给相应的程序进行处理,laravel的路由定义在routes文件夹中,默认提供了四个路由文件,其中web.php文件定义基本页面请求. 1.1.基本路由 最基本的路由请求是get与post请求,laravel通过Route对象来定义不同的请求方式.例如定义一个url为'req'的get请求,返回字符串'get response': Route::get('req',f

  • Laravel框架下的Contracts契约详解

    Contracts Laravel 的契约是一组定义框架提供的核心服务的接口, 例如我们在介绍用户认证的章节中到的用户看守器契约IllumninateContractsAuthGuard 和用户提供器契约IlluminateContractsAuthUserProvider以及框架自带的App\User模型所实现的IlluminateContractsAuthAuthenticatable契约. 为什么使用契约 通过上面几个契约的源码文件我们可以看到,Laravel提供的契约是为核心模块定义的一

  • Laravel框架数据库迁移操作实例详解

    很多人可能在学习Laravel框架的时候,对Laravel的数据库迁移(以下简称Migrations)存在着疑惑: 1. 什么是 Migrations? 2. 为什么要用 Migrations? 3. Migrations 到底方便在哪里? 好了,抱着这些问题,我们今天就一起来学习Migrations. 什么是 Migrations? 我们先来看一下Laravel官方文档怎么写的: Migrations are like version control for your database, al

  • Spring Boot Async异步执行任务过程详解

    异步调用就是不用等待结果的返回就执行后面的逻辑,同步调用则需要等带结果再执行后面的逻辑. 通常我们使用异步操作都会去创建一个线程执行一段逻辑,然后把这个线程丢到线程池中去执行,代码如下: ExecutorService executorService = Executors.newFixedThreadPool(10); executorService.execute(() -> { try { // 业务逻辑 } catch (Exception e) { e.printStackTrace(

随机推荐