1. add
  2. int \Workerman\Lib\Timer::add(float $time_interval, callable $callback [,$args = array(), bool $persistent = true])
  3. 定时执行某个函数或者类方法
  4.  
  5. 参数
  6. time_interval
  7.  
  8. 多长时间执行一次,单位秒,支持小数,可以精确到0.001,即精确到毫秒级别。
  9.  
  10. callback
  11.  
  12. 回调函数注意:如果回调函数是类的方法,则方法必须是public属性
  13.  
  14. args
  15.  
  16. 回调函数的参数,必须为数组,数组元素为参数值
  17.  
  18. persistent
  19.  
  20. 是否是持久的,如果只想定时执行一次,则传递false(只执行一次的任务在执行完毕后会自动销毁,不必调用Timer::del())。默认是true,即一直定时执行。
  21.  
  22. 返回值
  23. 返回一个整数,代表计时器的timerid,可以通过调用Timer::del($timerid)销毁这个计时器。
  24.  
  25. 示例
  26. 1、定时函数为匿名函数(闭包)
  27. use \Workerman\Worker;
  28. use \Workerman\Lib\Timer;
  29. require_once './Workerman/Autoloader.php';
  30.  
  31. $task = new Worker();
  32. // 开启多少个进程运行定时任务,注意多进程并发问题
  33. $task->count = 1;
  34. $task->onWorkerStart = function($task)
  35. {
  36. // 每2.5秒执行一次
  37. $time_interval = 2.5;
  38. Timer::add($time_interval, function()
  39. {
  40. echo "task run\n";
  41. });
  42. };
  43.  
  44. // 运行worker
  45. Worker::runAll();
  46. 2、定时函数为普通函数
  47. require_once './Workerman/Autoloader.php';
  48. use \Workerman\Worker;
  49. use \Workerman\Lib\Timer;
  50.  
  51. // 普通的函数
  52. function send_mail($to, $content)
  53. {
  54. echo "send mail ...\n";
  55. }
  56.  
  57. $task = new Worker();
  58. $task->onWorkerStart = function($task)
  59. {
  60. $to = 'workerman@workerman.net';
  61. $content = 'hello workerman';
  62. // 10秒后执行发送邮件任务,最后一个参数传递false,表示只运行一次
  63. Timer::add(10, 'send_mail', array($to, $content), false);
  64. };
  65.  
  66. // 运行worker
  67. Worker::runAll();
  68. 3、定时函数为类的方法
  69. require_once './Workerman/Autoloader.php';
  70. use \Workerman\Worker;
  71. use \Workerman\Lib\Timer;
  72.  
  73. class Mail
  74. {
  75. // 注意,回调函数属性必须是public
  76. public function send($to, $content)
  77. {
  78. echo "send mail ...\n";
  79. }
  80. }
  81.  
  82. $task = new Worker();
  83. $task->onWorkerStart = function($task)
  84. {
  85. // 10秒后发送一次邮件
  86. $mail = new Mail();
  87. $to = 'workerman@workerman.net';
  88. $content = 'hello workerman';
  89. Timer::add(10, array($mail, 'send'), array($to, $content), false);
  90. };
  91.  
  92. // 运行worker
  93. Worker::runAll();
  94. 4、定时函数为类方法(类内部使用定时器)
  95. require_once './Workerman/Autoloader.php';
  96. use \Workerman\Worker;
  97. use \Workerman\Lib\Timer;
  98.  
  99. class Mail
  100. {
  101. // 注意,回调函数属性必须是public
  102. public function send($to, $content)
  103. {
  104. echo "send mail ...\n";
  105. }
  106.  
  107. public function sendLater($to, $content)
  108. {
  109. // 回调的方法属于当前的类,则回调数组第一个元素为$this
  110. Timer::add(10, array($this, 'send'), array($to, $content), false);
  111. }
  112. }
  113.  
  114. $task = new Worker();
  115. $task->onWorkerStart = function($task)
  116. {
  117. // 10秒后发送一次邮件
  118. $mail = new Mail();
  119. $to = 'workerman@workerman.net';
  120. $content = 'hello workerman';
  121. $mail->sendLater($to, $content);
  122. };
  123.  
  124. // 运行worker
  125. Worker::runAll();
  126. 5、定时函数为类的静态方法
  127. require_once './Workerman/Autoloader.php';
  128. use \Workerman\Worker;
  129. use \Workerman\Lib\Timer;
  130.  
  131. class Mail
  132. {
  133. // 注意这个是静态方法,回调函数属性也必须是public
  134. public static function send($to, $content)
  135. {
  136. echo "send mail ...\n";
  137. }
  138. }
  139.  
  140. $task = new Worker();
  141. $task->onWorkerStart = function($task)
  142. {
  143. // 10秒后发送一次邮件
  144. $to = 'workerman@workerman.net';
  145. $content = 'hello workerman';
  146. // 定时调用类的静态方法
  147. Timer::add(10, array('Mail', 'send'), array($to, $content), false);
  148. };
  149.  
  150. // 运行worker
  151. Worker::runAll();
  152. 6、定时函数为类的静态方法(带命名空间)
  153. namespace Task;
  154. require_once './Workerman/Autoloader.php';
  155. use \Workerman\Worker;
  156. use \Workerman\Lib\Timer;
  157.  
  158. class Mail
  159. {
  160. // 注意这个是静态方法,回调函数属性也必须是public
  161. public static function send($to, $content)
  162. {
  163. echo "send mail ...\n";
  164. }
  165. }
  166.  
  167. $task = new Worker();
  168. $task->onWorkerStart = function($task)
  169. {
  170. // 10秒后发送一次邮件
  171. $to = 'workerman@workerman.net';
  172. $content = 'hello workerman';
  173. // 定时调用带命名空间的类的静态方法
  174. Timer::add(10, array('\Task\Mail', 'send'), array($to, $content), false);
  175. };
  176.  
  177. // 运行worker
  178. Worker::runAll();
  179. 7、定时器中销毁当前定时器(use闭包方式传递$timer_id
  180. use \Workerman\Worker;
  181. use \Workerman\Lib\Timer;
  182. require_once './Workerman/Autoloader.php';
  183.  
  184. $task = new Worker();
  185. $task->onWorkerStart = function($task)
  186. {
  187. // 计数
  188. $count = 1;
  189. // 要想$timer_id能正确传递到回调函数内部,$timer_id前面必须加地址符 &
  190. $timer_id = Timer::add(1, function()use(&$timer_id, &$count)
  191. {
  192. echo "Timer run $count\n";
  193. // 运行10次后销毁当前定时器
  194. if($count++ >= 10)
  195. {
  196. echo "Timer::del($timer_id)\n";
  197. Timer::del($timer_id);
  198. }
  199. });
  200. };
  201.  
  202. // 运行worker
  203. Worker::runAll();
  204. 8、定时器中销毁当前定时器(参数方式传递$timer_id
  205. require_once './Workerman/Autoloader.php';
  206. use \Workerman\Worker;
  207. use \Workerman\Lib\Timer;
  208.  
  209. class Mail
  210. {
  211. public function send($to, $content, $timer_id)
  212. {
  213. // 临时给当前对象添加一个count属性,记录定时器运行次数
  214. $this->count = empty($this->count) ? 1 : $this->count;
  215. // 运行10次后销毁当前定时器
  216. echo "send mail {$this->count}...\n";
  217. if($this->count++ >= 10)
  218. {
  219. echo "Timer::del($timer_id)\n";
  220. Timer::del($timer_id);
  221. }
  222. }
  223. }
  224.  
  225. $task = new Worker();
  226. $task->onWorkerStart = function($task)
  227. {
  228. $mail = new Mail();
  229. // 要想$timer_id能正确传递到回调函数内部,$timer_id前面必须加地址符 &
  230. $timer_id = Timer::add(1, array($mail, 'send'), array('to', 'content', &$timer_id));
  231. };
  232.  
  233. // 运行worker
  234. Worker::runAll();
  235. 9、只在指定进程中设置定时器
  236. 一个worker实例有4个进程,只在id编号为0的进程上设置定时器。
  237.  
  238. use Workerman\Worker;
  239. use Workerman\Lib\Timer;
  240. require_once './Workerman/Autoloader.php';
  241.  
  242. $worker = new Worker();
  243. $worker->count = 4;
  244. $worker->onWorkerStart = function($worker)
  245. {
  246. // 只在id编号为0的进程上设置定时器,其它1、2、3号进程不设置定时器
  247. if($worker->id === 0)
  248. {
  249. Timer::add(1, function(){
  250. echo "4个worker进程,只在0号进程设置定时器\n";
  251. });
  252. }
  253. };
  254. // 运行worker
  255. Worker::runAll();

  

workerman定时器使用 php定时任务的更多相关文章

  1. workerman定时器使用

    From: http://doc3.workerman.net/worker-development/add.html add int \Workerman\Lib\Timer::add(float ...

  2. thinkphp5使用workerman定时器定时爬取某站点新闻资讯等内容

    1.首先通过 composer 安装workerman,在thinkphp5完全开发手册的扩展->coposer包->workerman有详细说明: #在项目根目录执行以下指令compos ...

  3. Quartz cron 表达式(linux 定时器,java 定时任务,spring task定时任务)

    原文地址:https://blog.csdn.net/feng27156/article/details/39293403 Quartz cron 表达式的格式十分类似于 UNIX cron 格式,但 ...

  4. 动态添加定时任务-quartz定时器

    Quartz动态添加.修改和删除定时任务 在项目中有一个需求,需要灵活配置调度任务时间,刚开始用的Java自带的java.util.Timer类,通过调度一个java.util.TimerTask任务 ...

  5. Java开发笔记(九十九)定时器与定时任务

    前面介绍了线程的几种运行方式,不管哪种方式,一旦调用了线程实例的start方法,都会立即启动线程的事务处理.然而某些业务场景在事务执行时间方面有特殊需求,例如期望延迟若干时间之后才开始事务运行,又如期 ...

  6. [spring-framework]Spring定时器的配置和使用

    开发中我们常常会做一些定时任务,这些任务有开始时间,并会按一定的周期或规则执行.如此我们在Java程序开发中使用定时器来处理定时任务. <!-- MessageRequestTask类中包含了m ...

  7. angularjs定时任务的设置与清除

    人们似乎常常将AngularJS中 的$timeOut()  $interval()函数看做是一个内置的.无须在意的函数.但是,如果你忘记了$timeOut()$interval()的回调函数将会造成 ...

  8. storm定时器timer源码分析-timer.clj

    storm定时器与java.util.Timer定时器比较相似.java.util.Timer定时器实际上是个线程,定时调度所拥有的TimerTasks:storm定时器也有一个线程负责调度所拥有的& ...

  9. java定时器2-spring实现

    spring定时器(基于xml) spring定时器(基于注解) quartz定时器 1.使用基于xml配置的spring定时器 首先编写定时任务类Mytask public class Mytask ...

随机推荐

  1. ASP.NET MVC分页 Ajax+JsRender

    前段时间整mvc的分页,倒是很顺利,参考了以下几篇博客,启发很大. http://www.cnblogs.com/tangmingjun/archive/2012/05/30/2526301.html ...

  2. android开发(45) 自定义软键盘(输入法)

    概述 在项目开发中遇到一个需求,”只要数字键盘的输入,仅仅有大写字母的输入,某些输入法总是会提示更新,弹出广告等“,使得我们需要自定义输入. 关联到的知识 KeyboardView      一个视图 ...

  3. ECS Linux服务器xfs磁盘扩容

    ECS Linux服务器xfs磁盘扩 ECS Linux服务器xfs磁盘使用阿里云官方提供的磁盘扩容方法扩容会有报错: [root@iZ28u04wmy2Z ~]# e2fsck /dev/xvdb1 ...

  4. 我最喜欢的jQuery插件模板

    我使用jQuery已经有相当长的时间了,并且我会常常为它写一些插件(plugin).我尝试过用不同的方式去写,现在这个模板是我最喜欢的: 1 2 3 4 5 6 7 8 9 10 11 12 13 1 ...

  5. mtrace检查内存泄漏

    内存泄漏检查方法(for Linux) 如果你更想读原始文档, 请参考glibc info的"Allocation Debugging" 一章 (执行info libc);glib ...

  6. Mac使用git/github小结

    介绍 git 版本控制系统 相比CVS\SVN优势: - 支持离线开发,离线Repository- 强大的分支功能,适合多个独立开发者协作- 速度快 2. github是一个git项目托管网站 注册地 ...

  7. SpringBoot系列三:SpringBoot基本概念(统一父 pom 管理、SpringBoot 代码测试、启动注解分析、配置访问路径、使用内置对象、项目打包发布)

    声明:本文来源于MLDN培训视频的课堂笔记,写在这里只是为了方便查阅. 1.了解SpringBoot的基本概念 2.具体内容 在之前所建立的 SpringBoot 项目只是根据官方文档实现的一个基础程 ...

  8. MySQL中ALTER ,CHANGE , MODIFY

    ALTER TABLE project_list CHANGE COLUMN descriptionofproj proj_desc VARCHAR(100), CHANGE COLUMN contr ...

  9. svn -- 数据备份,版本回退,版本冲突,多仓库配置

    数据备份 差异存储法: 版本回退 版本冲突 原理图: 解决办法: 三种方案: 1)合理分配项目开发模块 wangcai:文章,邮件,会员 xiaoqiang:静态化,缓存,前台 2)合理分配项目开发时 ...

  10. python模块之psutil详解

    一.psutil模块: 1.psutil是一个跨平台库(http://pythonhosted.org/psutil/)能够轻松实现获取系统运行的进程和系统利用率(包括CPU.内存.磁盘.网络等)信息 ...