workerman定时器使用(附示例代码)
发布时间 - 2019-11-25 00:00:00 点击率:次下面由workerman php教程栏目给大家介绍workerman定时器使用方法,希望对需要的朋友有所帮助!
Workerman是一个高性能的socket服务器通讯框架,用于快速开发各种网络应用,包括tcp的、udp的、长连接、短连接应用。下面我们来介绍一下workerman定时器使用。
add
int \Workerman\Lib\Timer::add(float $time_interval, callable $callback [,$args = array(), bool $persistent = true])
定时执行某个函数或者类方法
参数
time_interval:多长时间执行一次,单位秒,支持小数,可以精确到0.001,即精确到毫秒级别。
callback:回调函数注意:如果回调函数是类的方法,则方法必须是public属性
args:回调函数的参数,必须为数组,数组元素为参数值
persistent:是否是持久的,如果只想定时执行一次,则传递false(只执行一次的任务在执行完毕后会自动销毁,不必调用Timer::del())。默认是true,即一直定时执行。
返回值
返回一个整数,代表计时器的timerid,可以通过调用Timer::del($timerid)销毁这个计时器。
示例
1、定时函数为匿名函数(闭包)
use \Workerman\Worker;
use \Workerman\Lib\Timer;
require_once './Workerman/Autoloader.php';
$task = new Worker();
// 开启多少个进程运行定时任务,注意多进程并发问题
$task->count = 1;
$task->onWorkerStart = function($task)
{
// 每2.5秒执行一次
$time_interval = 2.5;
Timer::add($time_interval, function()
{
echo "task run\n";
});
};
// 运行worker
Worker::runAll();2、定时函数为普通函数
require_once './Workerman/Autoloader.php';
use \Workerman\Worker;
use \Workerman\Lib\Timer;
// 普通的函数
function send_mail($to, $content)
{
echo "send mail ...\n";
}
$task = new Worker();
$task->onWorkerStart = function($task)
{
$to = 'workerman@workerman.net';
$content = 'hello workerman';
// 10秒后执行发送邮件任务,最后一个参数传递false,表示只运行一次
Timer::add(10, 'send_mail', array($to, $content), false);
};
// 运行worker
Worker::runA
ll();3、定时函数为类的方法
require_once './Workerman/Autoloader.php';
use \Workerman\Worker;
use \Workerman\Lib\Timer;
class Mail
{
// 注意,回调函数属性必须是public
public function send($to, $content)
{
echo "send mail ...\n";
}
}
$task = new Worker();
$task->onWorkerStart = function($task)
{
// 10秒后发送一次邮件
$mail = new Mail();
$to = 'workerman@workerman.net';
$content = 'hello workerman';
Timer::add(10, array($mail, 'send'), array($to, $content), false);
};
// 运行worker
Worker::runAll();4、定时函数为类方法(类内部使用定时器)
require_once './Workerman/Autoloader.php';
use \Workerman\Worker;
use \Workerman\Lib\Timer;
class Mail
{
// 注意,回调函数属性必须是public
public function send($to, $content)
{
echo "send mail ...\n";
}
public function sendLater($to, $content)
{
// 回调的方法属于当前的类,则回调数组第一个元素为$this
Timer::add(10, array($this, 'send'), array($to, $content), false);
}
}
$task = new Worker();
$task->onWorkerStart = function($task)
{
// 10秒后发送一次邮件
$mail = new Mail();
$to = 'workerman@workerman.net';
$content = 'hello workerman';
$mail->sendLater($to, $content);
};
// 运行worker
Worker::runAll();5、定时函数为类的静态方法
require_once './Workerman/Autoloader.php';
use \Workerman\Worker;
use \Workerman\Lib\Timer;
class Mail
{
// 注意这个是静态方法,回调函数属性也必须是public
public static function send($to, $content)
{
echo "send mail ...\n";
}
}
$task = new Worker();
$task->onWorkerStart = function($task)
{
// 10秒后发送一次邮件
$to = 'workerman@workerman.net';
$content = 'hello workerman';
// 定时调用类的静态方法
Timer::add(10, array('Mail', 'send'), array($to, $content), false);
};
// 运行worker
Worker::runAll();6、定时函数为类的静态方法(带命名空间)
namespace Task;
require_once './Workerman/Autoloader.php';
use \Workerman\Worker;
use \Workerman\Lib\Timer;
class Mail
{
// 注意这个是静态方法,回调函数属性也必须是public
public static function send($to, $content)
{
echo "send mail ...\n";
}
}
$task = new Worker();
$task->onWorkerStart = function($task)
{
// 10秒后发送一次邮件
$to = 'workerman@workerman.net';
$content = 'hello workerman';
// 定时调用带命名空间的类的静态方法
Timer::add(10, array('\Task\Mail', 'send'), array($to, $content), false);
};
// 运行worker
Worker::runAll();7、定时器中销毁当前定时器(use闭包方式传递$timer_id)
use \Workerman\Worker;
use \Workerman\Lib\Timer;
require_once './Workerman/Autoloader.php';
$task = new Worker();
$task->onWorkerStart = function($task)
{
// 计数
$count = 1;
// 要想$timer_id能正确传递到回调函数内部,$timer_id前面必须加地址符 &
$timer_id = Timer::add(1, function()use(&$timer_id, &$count)
{
echo "Timer run $count\n";
// 运行10次后销毁当前定时器
if($count++ >= 10)
{
echo "Timer::del($timer_id)\n";
Timer::del($timer_id);
}
});
};
// 运行worker
Worker::runAll();8、定时器中销毁当前定时器(参数方式传递$timer_id)
require_once './Workerman/Autoloader.php';
use \Workerman\Worker;
use \Workerman\Lib\Timer;
class Mail
{
public function send($to, $content, $timer_id)
{
// 临时给当前对象添加一个count属性,记录定时器运行次数
$this->count = empty($this->count) ? 1 : $this->count;
// 运行10次后销毁当前定时器
echo "send mail {$this->count}...\n";
if($this->count++ >= 10)
{
echo "Timer::del($timer_id)\n";
Timer::del($timer_id);
}
}
}
$task = new Worker();
$task->onWorkerStart = function($task)
{
$mail = new Mail();
// 要想$timer_id能正确传递到回调函数内部,$timer_id前面必须加地址符 &
$timer_id = Timer::add(1, array($mail, 'send'), array('to', 'content', &$timer_id));
};
// 运行worker
Worker::runAll();9、只在指定进程中设置定时器
一个worker实例有4个进程,只在id编号为0的进程上设置定时器。
use Workerman\Worker;
use Workerman\Lib\Timer;
require_once './Workerman/Autoloader.php';
$worker = new Worker();
$worker->count = 4;
$worker->onWorkerStart = function($worker)
{
// 只在id编号为0的进程上设置定时器,其它1、2、3号进程不设置定时器
if($worker->id === 0)
{
Timer::add(1, function(){
echo "4个worker进程,只在0号进程设置定时器\n";
});
}
};
// 运行worker
Worker::runAll();更多workerman知识请关注workerman教程栏目。
# workerman
# php
# 命名空间
# 回调函数
# public
# 闭包
# udp
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel怎么解决跨域问题_Laravel配置CORS跨域访问
如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?
javascript中的try catch异常捕获机制用法分析
微信h5制作网站有哪些,免费微信H5页面制作工具?
Laravel怎么实现前端Toast弹窗提示_Laravel Session闪存数据Flash传递给前端【方法】
晋江文学城电脑版官网 晋江文学城网页版直接进入
悟空浏览器如何设置小说背景色_悟空浏览器背景色设置【方法】
Laravel Telescope怎么调试_使用Laravel Telescope进行应用监控与调试
Internet Explorer官网直接进入 IE浏览器在线体验版网址
php嵌入式断网后怎么恢复_php检测网络重连并恢复硬件控制【操作】
Python文本处理实践_日志清洗解析【指导】
EditPlus中的正则表达式实战(6)
php静态变量怎么调试_php静态变量作用域调试技巧【解答】
高性能网站服务器配置指南:安全稳定与高效建站核心方案
Laravel如何安装使用Debugbar工具栏_Laravel性能调试与SQL监控插件【步骤】
电商网站制作价格怎么算,网上拍卖流程以及规则?
Swift中swift中的switch 语句
Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱动更新修复【详解】
laravel怎么配置和使用PHP-FPM来优化性能_laravel PHP-FPM配置与性能优化方法
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?
免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?
LinuxShell函数封装方法_脚本复用设计思路【教程】
浅谈redis在项目中的应用
如何快速查询网站的真实建站时间?
微信小程序 require机制详解及实例代码
Laravel如何自定义错误页面(404, 500)?(代码示例)
今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】
Android自定义控件实现温度旋转按钮效果
UC浏览器如何设置启动页 UC浏览器启动页设置方法
Laravel任务队列怎么用_Laravel Queues异步处理任务提升应用性能
Laravel如何实现多对多模型关联?(Eloquent教程)
Laravel如何实现用户密码重置功能?(完整流程代码)
长沙企业网站制作哪家好,长沙水业集团官方网站?
Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】
免费网站制作appp,免费制作app哪个平台好?
如何解决hover在ie6中的兼容性问题
Google浏览器为什么这么卡 Google浏览器提速优化设置步骤【方法】
Laravel如何使用Spatie Media Library_Laravel图片上传管理与缩略图生成【步骤】
如何快速搭建个人网站并优化SEO?
Laravel如何实现数据导出到PDF_Laravel使用snappy生成网页快照PDF【方案】
微信小程序 canvas开发实例及注意事项
北京的网站制作公司有哪些,哪个视频网站最好?
米侠浏览器网页图片不显示怎么办 米侠图片加载修复
Laravel如何实现邮箱地址验证功能_Laravel邮件验证流程与配置
谷歌浏览器如何更改浏览器主题 Google Chrome主题设置教程
如何使用 jQuery 正确渲染 Instagram 风格的标签列表
网站制作大概多少钱一个,做一个平台网站大概多少钱?
矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?
北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?


ll();