# 异步工具介绍
## v 1.2
### 1、优化
使用file_get_contents函数代替fsockopen函数,因为不明原因情况下fsockopen会导致nginx服务器响应301
,导致请求失败,而file_get_contents函数目前可以完美解决该问题,且无需耗时。
## v 1.1
### 1、新增属性
private $unique = false;//是否允许多个相同任务执行
private $task_redis_time = 1800;//默认所有缓存开关键值为1800秒也就是30分钟,有需求可以自带传参设置
### 2、优化
使用fsockopen打开链接方式替换CURL请求方式,原因:CURL异步请求至少等待 1S,而fsockopen打开链接就可以立即关闭,
唯一缺点需要手动拼接请求头。
### 3、路由优化
路由改为数组定义,字段route为路由带命名空间的类实例标识,value为路由任务说明。
例如:
'luck_hit_status' => [
'route' => \app\asy\controller\apps\luck\HitStatus::class,
'value' => '中奖记录核销状态处理'
],
## v 1.0
### 1、目录介绍
* asy(异步模块根目录)
* ----------controller(控制器)
* --------------------apps(业务模块)
* --------------------HttpAsy.php(异步任务分发器)
* --------------------HttpController.php(异步业务逻辑控制器基类)
* ----------model(模型)
* ----------asyRoute.php(路由)
### 2、实现一个任务的流程
正常的业务逻辑发起一个任务
↓
分发器
↓
发起Http异步请求
↓ <-----------------(直到业务处理完成)-----------┐
分发器
↓ ┆
自定义业务控制器
↓ ┆
------------------------- 调用asy方法(业务逻辑处理)-----------------------------
┆ ↓
└--(通知分发器任务完成)--> 结束任务
### 3、分发器
* 内置属性
private $asy_route 路由
private $self_api 本地异步接口名称 自定义的路由名称,必须指向本类方法asyStart
private $attribute_method 属性设置方法
private $redis 缓存实例
private $function_obj 处理中方实例
private $request_num 请求次数(在asy未通知分发器任务完成时的执行次数)
private $asy_class 异步处理类
public static $max_processes_num 最大进程数(默认数量,实际取设置数量)
private $processes_id 进程标识
private $can_post 是否能请求
private $concurrent_time 并发情况下间歇时长
* 实例化传参
route 任务路由(必填)
wxapp_id 小程序ID(必填)
time 任务处理轮询间隔时间(选填,默认为3秒)
param 额外参数(选填,默认为[])
* 缓存(REDIS)
使用REIDS中的ASY任务模块,在分发器发起异步请求自己时才会进行作用,主要用于任务的开关及执行次数及进行中的任务统计。
a、用到的缓存键名
· 任务开关 KEY
'自定义任务控制器' . 'app\asy\controller\HttpAsy' . '_pid:' . '任务标识'
· 任务执行次数 KEY
'自定义任务控制器' . 'pages_pid:' . '任务标识'
· 进行中的任务数 KEY
asy_have_in_num
b、缓存作用
· 任务开关:
在一个任务发起前是不存在这个任务开关的缓存,只有在任务发起时的任务分发器异步请求时才会
判断该缓存是否存在,如果存在即表示是任务轮询执行此时不会重新设置开关,若不存在即证明是
一个新的任务发起,这时才会记录目前的任务开关并记录进行中的任务数。
· 任务执行次数:
根据实现一个任务的流程图来解释,在任务进行的情况下,如果不在任务逻辑代码中通知任务分发
器任务处理完毕,那么任务会一直轮询,那么在这个轮询的过程中就有一个执行次数就这里所说的
任务执行次数了,这个数量会赋值给我们的内置属性 request_num 来传递给我们的主动调用方法
asy(),那么有这个数据,我们在处理大量的分页数据就能轻易的实现。
· 进行中的任务数:
每当一个新的任务发起时就会记录一个进行中的任务数量,与内置静态属性 max_processes_num
共同作用防止超出服务器能够承受得压力导致,服务器挂载,因为这里用的是一个Http的请求来实
现异步处理,如果同时进行的任务量较大的话就有可能造成一个高并发的情况导致服务器挂载。
* 设计模式
这里使用的PHP的设计模式工厂模式,工厂模式可以百度理解起作用,这里讲一下在我们这个任务分发器中的
适配优点就行,由于我们有一个asyRoute.php的路由文件,这个文件是直接返回的一个数据,在外面的任务
分发器中来加载这个路由文件,然后会用实例化传递的路由名称来找到对应注册在路由文件中的的逻辑类来实
例化,并且主动调用asy()方法并默认传参 $this->request_num,$this->param,所以这就是为什么我们只
需要在路由文件中注册一下我们的逻辑类就可以实现任务调动,就是这么简单。
* 使用方法
用法示例:
1、先在asy->controller->创建模块->创建业务逻辑控制器
2、继承HttpController.php基类
3、实现主动调用方法
public function asy($page,$param){
//业务逻辑代码
//通知分发器任务完成(根据具体业务逻辑调用)
$this->close(__CLASS__);
}
4、在asyRoute.php路由文件中注册我们的业务逻辑控制器
'route_name' => \app\asy\controller\apps\cgp\RouteName::class,
5、在合适的流程代码中发起任务
//实例化注册任务
$asy = new app\asy\controller\HttpAsy([
'route' => 'route_name',//必填
'wxap_id' => 1,//必填
'time' => 3,//选填,默认为3
'param' => ['user_id' => 1,'order_id' => 1]//选填,默认为[]
]);
//发起任务
$asy->start();
### 4、代码约定
* 业务逻辑控制器必须继承HttpController.php基类控制器,因为改基类控制器能够帮助我们快速获取必用参数wxapp_id和通知分发器任务完成的辅助方法close();
* 在异步业务逻辑中若需要用到模型就必须在我们的asy->model模块中来新建一个模型来继承common模块下面的父模型,切记需要在新�
没有合适的资源?快使用搜索试试~ 我知道了~
零点城市社交电商至尊版saas
共2000个文件
js:11048个
php:4585个
css:3769个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 6 下载量 110 浏览量
2022-06-24
22:27:52
上传
评论 1
收藏 288.37MB ZIP 举报
温馨提示
产品介绍 零点城市社交电商致力于为大家提供集高颜值,多元化营销场景于一体的城市电商解决方案,全渠道协助本地社交电商的拓新,促活,留存与转化,助力数据化营销运营,深度 挖掘城市生活电商生态。这两年同城电商逐渐开始流行,各个电商平台都开始专注微信生态下的社交电商拉新获客,成交转化,用户留存,增购复购,分享裂变,运营迭代,深度连接本地城市生活电商生态。 城市自媒体解决方案 1.多渠道合一,全方面触达引流, 2.大数据筛选,精准营销,降低运营成本及广告成本 3.上百种多元化营销玩法,灵活应对不同客户群体和线下场景 4.与实战运营者密切合作,不断优化客户真正需求的功能 5.社群与社交功能完美结合,全方面打造用户网络 6.平台/商家/用户三端无缝沟通,加强粉丝粘性,建立自己的私域流量
资源推荐
资源详情
资源评论
收起资源包目录
零点城市社交电商至尊版saas (2000个子文件)
pimple.c 37KB
chunk-3917767c.24fdd976.css 356KB
chunk-87aa6f86.d020f316.css 356KB
chunk-f705f11e.03301128.css 356KB
chunk-230b7e20.823f0b1c.css 356KB
chunk-093d2f88.00c7d125.css 356KB
chunk-4d784819.72d5f599.css 356KB
chunk-07135d73.b75560ef.css 356KB
chunk-1d4f15da.58c38439.css 356KB
chunk-43faa104.34cfecde.css 355KB
chunk-7543f122.abdc237e.css 355KB
chunk-e3aed64a.199357a4.css 355KB
chunk-9511bc12.f9b1e93c.css 355KB
chunk-f25bcbea.ca5347db.css 355KB
chunk-f69ee4d6.026dca7f.css 355KB
chunk-fce1d3bc.af37b778.css 355KB
chunk-66da09e2.d395322b.css 355KB
chunk-c4268ee4.5da807bd.css 355KB
chunk-5306adc0.72447946.css 355KB
chunk-13da5a0f.cebc8370.css 355KB
chunk-b7b8bb06.fe9fcb42.css 355KB
chunk-4fe4121e.7c70e9cf.css 355KB
chunk-a541c102.28c134b1.css 355KB
chunk-66da.d395322b.css 355KB
chunk-48a8b939.007c103c.css 355KB
chunk-elementUI.771dee72.css 343KB
chunk-elementUI.21d918a9.css 337KB
chunk-elementUI.f77a3512.css 337KB
index.css 93KB
index.css 93KB
chunk-770c5de0.38ba06a8.css 69KB
chunk-2e87902a.c8a83e90.css 69KB
chunk-3daa87b2.438988ec.css 69KB
chunk-f42e768a.ab3763ea.css 69KB
chunk-dac1919e.d43e8b9c.css 69KB
chunk-124b692c.1c5a5ffb.css 69KB
chunk-4ee8.1a412e13.css 69KB
chunk-6b7fe0ee.077262be.css 69KB
chunk-4ee8bfc5.1a412e13.css 69KB
chunk-48c93568.9c7cd1c2.css 69KB
chunk-328a8c7c.e9d82897.css 69KB
chunk-829470da.7ffa367c.css 69KB
chunk-5a130935.c1931528.css 69KB
chunk-40c27a09.70354747.css 69KB
app.cc7ddc1d.css 63KB
app.ac46d131.css 63KB
app.aaa4d2da.css 63KB
app.65da6c32.css 63KB
app.1771f3f5.css 63KB
app.9cddce13.css 63KB
app.568160ec.css 63KB
app.82a09730.css 63KB
app.637820ee.css 63KB
app.970a9e06.css 63KB
app.d663759e.css 63KB
ueditor.css 45KB
skin.min.css 42KB
chunk-66229398.61e5e68f.css 42KB
chunk-7a95.b8878c7d.css 42KB
chunk-7a95e810.b8878c7d.css 42KB
chunk-370e4aed.625f0bb3.css 42KB
chunk-9ae0e1e6.4bd4037c.css 42KB
chunk-78541aae.687386f4.css 42KB
chunk-3e04aafa.d97ac2d9.css 42KB
chunk-2abd6110.e570f428.css 42KB
chunk-5c7eeea3.4a36631f.css 42KB
chunk-287ca9d0.1f9b6a3a.css 42KB
chunk-15a2b950.763aa5c2.css 42KB
chunk-3e365018.90c7aa6a.css 42KB
chunk-ffb1fb3a.d3d1fd82.css 42KB
chunk-04a5be43.f07562c4.css 42KB
chunk-5837724d.3a2d294c.css 42KB
chunk-31bd82c3.7d1a8b9a.css 42KB
chunk-938782ba.91d67d64.css 42KB
ueditor.min.css 34KB
chunk-commons.cc34f3ec.css 25KB
chunk-commons.8438b032.css 25KB
chunk-commons.721388f5.css 25KB
chunk-commons.c012c839.css 25KB
chunk-commons.a67fa288.css 25KB
chunk-commons.45d542e4.css 25KB
chunk-commons.5e7a4345.css 25KB
chunk-commons.8e7e868c.css 25KB
chunk-commons.d4d62a22.css 25KB
chunk-commons.7959d0fa.css 25KB
chunk-commons.32e4bc91.css 25KB
chunk-commons.d2d21a0a.css 25KB
chunk-commons.c64ab9ca.css 25KB
chunk-commons.df4b0aad.css 25KB
chunk-commons.55d0234b.css 25KB
chunk-commons.216a2483.css 25KB
chunk-commons.da7e86b1.css 25KB
chunk-commons.2f841fe0.css 25KB
chunk-commons.8de4a674.css 25KB
chunk-commons.c0fd70fa.css 25KB
chunk-commons.e89454ad.css 25KB
chunk-commons.b77bd1a1.css 25KB
chunk-commons.d6189761.css 25KB
chunk-commons.a2cd138c.css 25KB
chunk-commons.e36b2cf7.css 25KB
共 2000 条
- 1
- 2
- 3
- 4
- 5
- 6
- 20
zsdmt
- 粉丝: 2
- 资源: 23
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页