easyswoole - 基于swoole扩展实现的一款高性能php框架

Timer定時器

框架對Swoole毫秒級定時器進行了封裝,方便開發者快速上手。

注意??:定時器傳入的時間參數為毫秒,若開啟了 reload_async 配置時,請將定時器移動到自定義進程內,否則會導致worker進程無法reload

循環執行

設置一個間隔時鐘定時器,每隔一定的時間定時觸發,直到進行 clear 操作才會停止,對應 Swoole 原生的定時器函數為 swoole_timer_tick

函數原型

/**
* 循環調用
* @param int      $ms 循環執行的間隔毫秒數 傳入整數型
* @param \Closure $callback 定時器需要執行的操作 傳入一個閉包
* @param string    $name 定時器名稱,用于取消該定時器
* @param mixed ...$params 傳入定時器的參數
* @return int 返回整數型的定時器編號 可以用該編號停止定時器
*/
public function loop(int $ms, callable $callback, $name = null, ...$params)

示例代碼

// 每隔 10 秒執行一次
\EasySwoole\Component\Timer::getInstance()->loop(10 * 1000, function () {
    echo "this timer runs at intervals of 10 seconds\n";
});

延時執行

設置一個延時定時器,延時指定的時間后觸發對應的操作,只會執行一次操作,對應Swoole 原生的定時器函數為 swoole_timer_after

函數原型

/**
* 延時調用
* @param int      $ms 需要延遲執行的時間
* @param \Closure $callback 定時器需要執行的操作 傳入一個閉包
* @param mixed ...$params 傳入定時器的參數
* @return int 返回整數型的定時器編號 
*/
public function after(int $ms, callable $callback, ...$params)

示例代碼

// 10 秒后執行一次
\EasySwoole\Component\Timer::getInstance()->after(10 * 1000, function () {
    echo "ten seconds later\n";
});

清除定時器

注意: 該操作不能用于清除其他進程的定時器,只作用于當前進程

定時器創建成功時,會返回一個整數型編號,調用本函數傳入該編號,即可提前停止定時器,對應 Swoole 原生的定時器函數為 swoole_timer_clear

函數原型

/**
* 清除定時器
* @param mixed $timerIdOrName 定時器編號或名稱
* @return bool
*/
public function clear($timerIdOrName)

示例代碼

// 創建一個2秒定時器
$timerId = \EasySwoole\Component\Timer::getInstance()->loop(2 * 1000, function () {
    echo "timeout\n";
},'time');

// 清除該定時器
var_dump(\EasySwoole\Component\Timer::getInstance()->clear($timerId)); // bool(true)
var_dump($timerId); // int(1)

// 定時器得不到執行 不輸出:timeout

應用實例

注意:定時器不能在服務啟動之前使用。在服務啟動以后,添加的定時器僅在當前進程中有效。在 WorkerStart 事件中添加定時器時,請注意判斷需要添加定時器的workerId,否則該定時器在每個進程中均會被執行。

// 為第一個 Worker 添加定時器
if ($workerId == 0) {
    \EasySwoole\Component\Timer::getInstance()->loop(10 * 1000, function () {
        echo "timer in the worker number 0\n";
    });
}
public static function mainServerCreate(EventRegister $register)
{
    $register->add(EventRegister::onWorkerStart, function (\swoole_server $server, $workerId) {
        //如何避免定時器因為進程重啟而丟失
        //例如在第一個進程 添加一個10秒的定時器
        if ($workerId == 0) {
            \EasySwoole\Component\Timer::getInstance()->loop(10 * 1000, function () {
                // 從數據庫,或者是redis中,去獲取下個就近10秒內需要執行的任務
                // 例如:2秒后一個任務,3秒后一個任務 代碼如下
                \EasySwoole\Component\Timer::getInstance()->after(2 * 1000, function () {
                    //為了防止因為任務阻塞,引起定時器不準確,把任務給異步進程處理
                    Logger::getInstance()->console("time 2", false);
                });
                \EasySwoole\Component\Timer::getInstance()->after(3 * 1000, function () {
                    //為了防止因為任務阻塞,引起定時器不準確,把任務給異步進程處理
                    Logger::getInstance()->console("time 3", false);
                });
            });
        }
    });
}

經典案例-訂單狀態超時監控

場景說明:在很多搶購的場景中,訂單下單完成后,需要限制其付款時間,或者是在棋牌游戲中,需要對房間狀態進行監控。那么我們可以先把待監控的訂單或者是房間壓入redis 隊列中。那么就可以利用 定時器 + 異步進程,去實現對訂單狀態的循環監控。

主站蜘蛛池模板: 紫铜箔(带)导电胶带定做,定做紫铜箔(带)导电胶带厂家[价格]-艾飞敏铜箔 | 优质课网_收录全国及各省市最新优质课视频,说课视频,名师课例课堂实录,高效课堂教学视频,观摩展示公开示范优秀课视频,教学大赛视频! | 性激素6项实验检测,放射免疫实验检测,明胶酶谱试剂盒,科研用人血清,质控标品,试剂盒-南京信帆生物技术有限公司 | 天然气车船展、氢能装备展、氢燃料汽车展、核电装备展、国防信息化装备展---北京企发展览服务有限公司 | 苏州交通设施_道路划线_停车场划线_厂区划线_环氧地坪厂家-推荐【飞扬市政交通设施公司】专注交通设施8年! | 企多网-B2B网站,B2B商务平台免费b2b,推荐注册送积分,免费注册企业商铺, | 罗茨鼓风机维修_三叶罗茨风机维修厂家电话_山东长沙章丘鼓风机修理_章鼓高压真空泵「上门服务」 罗茨鼓风机价格_三叶罗茨鼓风机厂家-山东锦工有限公司 | 小程序商城,_电商系统源码,直播商城定制开发电商系统源码,电商系统,java电商系统 | 中陕核二一〇研究所有限公司 | 无缝钢管生产厂家-20G-L360N无缝钢管价格-天津海诚无缝钢管集团 无尘投料站-真空上料机-旋振筛|超声波振动筛|摇摆筛|筛分机-新乡市欧霖佳机械有限公司 | 山东荣利中石油机械有限公司| 威海电子电镀,山东五金电镀,威海镀镍,山东镀铜镍铬-威海鑫镱金属制品厂 | 深圳办公室装修_设计_实景_效果图_哪家好-公装装饰公司 | 深圳钢成培训专业从事,五轴培训,车铣复合培训,数控车床,CNC数控编程,模具编程 ,钣金机械与模具设计,powermill,mastercam,solidworks,ug,hypermill培训 | 深圳LED显示屏厂家_室内户外LED显示屏_彩屏电子有限公司 | 思源医疗器械网,雾化器厂家,医用床生产厂家,医疗器械厂家,医疗器械代加工 | 通道闸-人行通道闸|通道闸机系统厂家-深圳伊帕克智能科技有限公司 | 汽车漆品牌|家具漆代理|涂料加盟厂家|家具漆|汽车漆-邦派漆官网 汽车漆|汽车油漆|工业油漆涂料|汽车漆加盟-佛山市科涂涂料有限公司 | 四方光电(武汉)仪器有限公司_四方仪器首页-烟气分析仪|尾气分析仪|煤气分析仪|沼气分析仪|天然气分析仪|超声波流量计|在线气体分析系统|红外气体传感器 | 南昌今工科技有限公司| 长沙思辰仪器科技有限公司 | 邮政纸箱_淘宝纸箱_抗压纸箱,盐城纸箱,盐城纸箱厂家,盐城承重纸箱-盐城君雅纸箱 | 重庆聚成达汽车有限公司-重庆吸污净化车 | 钱眼网-透过钱眼看商机| 中派康明斯发电机_玉柴发电机厂家_静音移动拖车发电机-深圳市斯坦福电力设备有限公司 | 拼装式电磁屏蔽室厂家,屏蔽机柜生产厂家,电波暗室制造商,屏蔽配件-常州麦思恩屏蔽机柜生产厂家 | 西安防静电地板_防静电地板厂家_防静电地板价格_OA网络地板_写字楼架空地板_机房墙板安装-红梅防静电地板厂家直销 | 柔性电缆-专业机器人电缆,拖链电缆生产厂家 | 山东腾达源金属材料官网-耐磨板nm400,nm400耐磨钢板,nm500耐磨钢板切割,耐候板批发,高强板现货【价格】 | 延吉新闻网 - 未来之选·就是延吉 [YanJinews.com] | 水处理设备_纯净水设备_软化水设备_反渗透水处理设备「陕西甘肃青海宁夏新疆」认准海川环保 | 冷却塔厂家_冷却塔降噪维修_闭式冷却塔维修改造厂家-广东特菱空调 | 鲁氏罗茨风机-三叶罗茨鼓风机厂家-沉水式鼓风机-[瑞柘环保] | 上海增晨贸易有限公司-PC端 | 武汉凯美隆窗帘厂家_定做商用窗帘_家用遮阳帘_涵盖电动窗帘_天棚帘_遮阳棚_凯美隆-专注遮阳产品 武汉净化机-武汉全热新风换气机-武汉静音送风机-武汉东信新风节能设备有限公司 | 纠偏系统厂家-迈欣机械| 真空机器人维修_晶圆机械手保养_半导体机械臂维修_面板机器人保养_AMHS改造-广州市广科智能技术有限公司 | 免费建站_自助建站_网站建设_企业建站_中小企业建网站_免费网站模板-牵牛建站 | 天津印刷_天津印刷厂_天津印刷公司_天津包装盒厂家_天津包装盒印刷厂_七层共挤膜厂家_彩色印刷_画册印刷_礼品盒定做 _七层共挤膜_食品真空袋-欢迎访问嘉联包装官网! | 陶瓷靶材_氧化铌靶材_合金靶材_专注河北氧化铌靶材批发-河北东同光电科技有限公司 | 明基太阳能玻璃钢污水处理公司-设计研发全自动加药装置设备 |