Hyperf
Swoole
这次我们利用hyperf的Crontab能力做一个Excel导出功能。基于Hyperf2.0版本进行

场景
Excel导出是我们在日常业务中常用的一种功能,各种数据列表须要在供应查询展示功能的同时,一样平常也须要带有导出功能,一样平常在数据量不大的时候直接下载就可以了,但是如果数据量几万、十几万或者更多的时候,随意马虎导致数量大要求超时、内存溢出等问题导致导出失落败,办理方案呢有很多种,这里我们利用操持任务的异步形式来做。
这里的限定一方面来自数据库查询的压力,大批量数据查询随意马虎超时内存溢出、第二个方面是Excel天生时会吃掉大量的内存,每个行、每个列都要load到内存中,末了写入到文件,可想这是很恐怖的事情。而常规php-fpm下对内存及程序的运行韶光都是有限定的。
条件准备
安装crontab组件 composer require hyperf/crontab利用表明声明一个操持任务,须要配置属性name任务名称、rule也便是实行韶光、callback也便是业务实行逻辑,关于表明我们之前已经学习过了hyperf表明在crontab的callback中编写业务逻辑就可以了实行逻辑
在数据列表中点击下载的时候,通过接口创建一个下载任务 export_task操持任务每分钟实行一次,每次通过task状态去获取待处理的任务处理完成之后将天生的文件路径,更新到task中不才载中央就可以下载了操持任务在hyperf中便是一个自定义的进程干系演示Demo
export_task表
crontab表明声明一个操持任务 每分钟一次
启动做事后 php ./bin/hyperf.php start 操持任务进程就会启动
操持任务
同时我们在web端展示两个列表,一个用户列表,一个导出任务列表。
前端这里利用React结合antDesign库大略完成
前端实行:yarn start 将会启动前端页面
用户列表
点击下载-天生异步任务
去下载中央下载就可以了
干系事变
如果想运行代码的话须要提前准备一下几点:
确认干系表已经创建 php ./bin/hyperf migrate 如果是第一次须要实行 migrate:install 创建migrate表确认composer干系依赖已经安装 实行 composer install确认React干系依赖已经安装 实行 yarn add跨域的办理这里利用hyperf供应的方案总结
这里只是供应了一种异步的思路,大家可以根据自己的实际业务去构思不同的方案
干系代码:
https://github.com/nobody05/hyperf_study
干系文档:
crontab利用解释:https://hyperf.wiki/2.0/#/zh-cn/crontab
跨域处理:https://hyperf.wiki/2.0/#/zh-cn/middleware/middleware?id=%e8%b7%a8%e5%9f%9f%e4%b8%ad%e9%97%b4%e4%bb%b6
ant文档:https://ant.design/components/table-cn/#components-table-demo-reset-filter