xutongle
- xutongle 2018-07-04 已签到连续签到1天,获得了5个金钱
- xutongle 发表了说说YII 这是废了 Laravel都更了5-6个大版本了,YII毛都没
- xutongle 回复了 qq497012571 的评论
我可没资格嘲笑别人哦. 因为每个人的想法都不同,需求也不同.我可以简单说下我这种方式的优点
- 可以支持可视化定时任务管理
- 灵活的时间时间控制,支持较为复杂的定时任务需求(兼容crontab语法)
- 多个任务,同一时间会并发执行,不会出现串行阻塞(使用的proc_open这个函数来创建子进程,实现并发,跨平台)
说一下我对你的这种实现方式的看法(疑问)
发现你貌似使用的是YII自带的Event类,做定时任务,我阅读的一下trigger这个源代码发现最终触发的是call_user_func这个函数.这样就意味着.你这种实现方式, 假设多个定时任务同一时间执行就会变成串行阻塞, 就是后面的任务要等前面的任务执行完毕才执行~ 这样是否会有问题,是否满足你的需求呢? 看你自己了
@qq497012571 我这个想法比较简单,预定义几个执行时间,然后配置文件一写,执行确实是串行的。
- xutongle 评论了源码 Yii2 集成滑动验证码
滑动验证,在网页被缩放到非默认100%,错位,然后验证失败
- xutongle 评论了教程 Yii2 生成纯静态html文件
可以考虑按照PHPCMS的设计思路,在数据库里保存URI,然后你就知道HTML放哪里了,更新的时候删除这个HTML文件即可。
这么干会不会被嘲笑
/** * Class CronController * * 0/5 * * * * /path/to/yii task/minute >/dev/null 2>&1 * 30 * * * * /path/to/yii task/hourly >/dev/null 2>&1 * 00 18 * * * /path/to/yii task/daily >/dev/null 2>&1 * 00 00 15 * * /path/to/yii task/month >/dev/null 2>&1 * * @author Tongle Xu <xutongle@gmail.com> * @since 3.0 */ class TaskController extends Controller { /** * @event Event 每分钟触发事件 */ const EVENT_ON_MINUTE_RUN = "minute"; /** * @event Event 每小时触发事件 */ const EVENT_ON_HOURLY_RUN = "hourly"; /** * @event Event 每天触发事件 */ const EVENT_ON_DAILY_RUN = "daily"; /** * @event Event 每月触发事件 */ const EVENT_ON_MONTH_RUN = "month"; /** * @var string */ protected $dateTime; /** * @var string 任务配置文件 */ public $taskFile = '@vendor/yuncms/tasks.php'; /** * @throws \yii\base\InvalidConfigException */ public function init() { parent::init(); $this->dateTime = Yii::$app->formatter->asDatetime(time()); $this->taskFile = Yii::getAlias($this->taskFile); } /** * 初始化并注册计划任务 */ public function initTask() { if (is_file($this->taskFile)) { $tasks = require $this->taskFile; foreach ($tasks as $task) { if (isset($task['class'])) { Event::on($task['class'], $task['event'], $task['callback']); } else { Event::on($task[0], $task[1], $task[2]); } } } } }
/** * Executes minute cron tasks. * @return int */ public function actionMinute() { $this->stdout($this->dateTime . " Executing minute tasks." . PHP_EOL, Console::FG_YELLOW); $this->trigger(self::EVENT_ON_MINUTE_RUN); return ExitCode::OK; }
- xutongle 评论了教程 使用 Yii2 构建一个定时任务管理后台
这么干会不会被嘲笑
/** * Class CronController * * 0/5 * * * * /path/to/yii task/minute >/dev/null 2>&1 * 30 * * * * /path/to/yii task/hourly >/dev/null 2>&1 * 00 18 * * * /path/to/yii task/daily >/dev/null 2>&1 * 00 00 15 * * /path/to/yii task/month >/dev/null 2>&1 * * @author Tongle Xu <xutongle@gmail.com> * @since 3.0 */ class TaskController extends Controller { /** * @event Event 每分钟触发事件 */ const EVENT_ON_MINUTE_RUN = "minute"; /** * @event Event 每小时触发事件 */ const EVENT_ON_HOURLY_RUN = "hourly"; /** * @event Event 每天触发事件 */ const EVENT_ON_DAILY_RUN = "daily"; /** * @event Event 每月触发事件 */ const EVENT_ON_MONTH_RUN = "month"; /** * @var string */ protected $dateTime; /** * @var string 任务配置文件 */ public $taskFile = '@vendor/yuncms/tasks.php'; /** * @throws \yii\base\InvalidConfigException */ public function init() { parent::init(); $this->dateTime = Yii::$app->formatter->asDatetime(time()); $this->taskFile = Yii::getAlias($this->taskFile); } /** * 初始化并注册计划任务 */ public function initTask() { if (is_file($this->taskFile)) { $tasks = require $this->taskFile; foreach ($tasks as $task) { if (isset($task['class'])) { Event::on($task['class'], $task['event'], $task['callback']); } else { Event::on($task[0], $task[1], $task[2]); } } } } }
你可以在你当前项目的 composer.json 加上
"provide": { "bower-asset/jquery": "3.2.*@stable | 3.1.*@stable | 2.2.*@stable | 2.1.*@stable | 1.11.*@stable | 1.12.*@stable", "bower-asset/inputmask": "~3.2.2 | ~3.3.5", "bower-asset/punycode": "1.3.*", "bower-asset/yii2-pjax": "~2.0.1", "bower-asset/font-awesome": "4.7.*@stable", "bower-asset/jquery-ui": "~1.12.1" },
忽略掉框架给你安装的这些第三方脚本。
然后在当前项目的目录用npm安装依赖打包即可- xutongle 评论了教程 Yii2 应用 swoole 的两种思路
总觉得跟swoole整合 怎么弄不不太优雅。按理说 app入口应该类似、\yii\web\Application 一样单起个入口,来跑服务,但是Yii的单例又污染了一些变量和组件。需要大改。。。