jean / swoolecron
基于SWOOLE的定时任务
v1.0.2.9
2016-09-18 05:41 UTC
Requires
- php: >= 5.4.0
- ext-swoole: >= 1.7.8
Suggests
- ext-swoole: to use the swoole implementation
README
- 实现多个独立的方法同步并行调用;(已完成)
- 启动SERVER自行加载以及周期性更新任务配置,并按配置执行相关任务(已完成).
- WEB环境下可以立即执行一个异步任务,也可以获取一个队列,将一个异步任务投递到队列当中由队列去控制执行,基于beanstalk
- 内置HTTP服务,简易WEB管理SERVER服务本身,同时管理SERVER中的任务,队列(开发中).
composer require jean/swoolecron
##使用 1.多进程并行调用独立方法:
使用场景:一个WEB请求过来,通常按顺序可能要调用A,B,C,D等多个方法,而且常常几个方法可能是独立的可以并行执行的,但是PHP的同步堵塞导致只能一个一个方法去调用,影响响应速度.
<?php use jean\swoolecron\Job; $rs = Job::syncRun([ 'worker_num' => 3,//任务进程数,最大10,最小1 'fun' => [//每个进程对应的回调函数,可以只指定一个函数,这样就所有任务进程都调用同一个函数 array($this, 'test1'),//任务进程1回调函数 array($this, 'test2'),//任务进程2回调函数 array($this, 'test3'),//任务进程3回调函数 ], 'data' => //可选参数,对应任务进程回调函数的参数 [ ['任务进程1传递的参数'], ['任务进程2传递的参数'], ['任务进程3传递的参数'], ], ]); 执行结果值返回格式(注:回调函数返回结果必须为真,否则会出现异常): $rs =[ 0=>$data1,//任务进程1回调函数返回结果 1=>1$data2,//任务进程2回调函数返回结果 2=>$data3,//任务进程3回调函数返回结果 ]
2.Server和Client的解说和使用:
单个任务格式:
[
'taskId'=>'11',//任务ID,全局唯一
'description'=>'',//任务描述
'taskType'=>'loop',//任务类型(single,loop)
'callbackType'=>'script',//回调类型(rest,script)口回调
'script'=>'/var/www/project/market/yii swoole-server/test',//回调的脚本命令或URL
'data'=>[],//回调的数据
'requestType'=>'get',//请求的类型(rest脚本专属)get,post,put,delete
'on'=>'',//任务首次执行时间戳(秒),当前时间大于或等于该时间戳时即刻执行,否则等待到该时间戳间执行时间戳间执行
'interval'=>'1',//同任务执行最短间隔时间,单位秒
'loop_end'=>'0',//循环任务截止时间戳,默认不限制
'loop_count'=>'100',//任务循环多少次截止,默认不限制
'action'=>'reload',//任务指令:执行任务:start;停止任务(如果在执行的化)stop;重载任务:reload
'actionUpdateTime' =>'2016-01-21 20:07:59' //判断任务是否需要更新,转换时间戳增加表示任务需要更新
],
3.Client使用
目前只实现了重载服务,关闭服务,服务状态查询以及投递单个异步任务
<?php
use jean\lib\SingleTask;
use jean\swoolecron\Client;
$client = new Client($ip,$port);
$task = new SingleTask(
[
'callbackType'=>'script',//回调类型(rest,script)口回调
'script'=>'/var/www/project/market/yii swoole-server/test',//回调的脚本命令或URL
'requestType'=>'get',//请求的类型(rest脚本专属)get,post,put,deleteelete
'data'=>[1,2,3,4],
]
);
$rs = $client->job($task);//投递一个异步任务
$client->stopServer();//关闭服务
$client->reloadServer();//重载服务
$client->serverStatus();//关闭服务
4.beanstalk队列的使用
队列服务使用
引入类:use jean\swoolecron\Consumer;
启动:Consumer::run();
重载:Consumer::reload();
停止:Consumer::stop();
队列的配置文件:jobConsumer.php
队列服务的实例(热点)
API项目根目录下服务的启动,停止和重载命令:
启动队列调度服务命令:yii consumer/start
停止队列调度服务命令:yii consumer/stop
重载队列调度服务命令:yii consumer/reload