您好,SwoolePHP的协程高性能网络通信引擎,用C/C++语言编写,提供各种通信协议的网络服务器和客户端模块。Swoole可应用于互联网、移动通信、企业软件、网络游戏、物联网、车联网、智能家居等领域。在学习Swoole之前,最好先了解一下底层知识,比如线程/进程、IO、TCP/IP协议等,推荐大家看一下这本书《Linux 高性能服务器编程》。我有这本书的PDF版本。需要的可以关注公众号回复“Linux高性能服务器编程”获取。本文主要分享毫秒级精度的Timer定时器。本地版本:PHP7.2.6,Swoole4.3.1。定时器主要有三个方法:swoole_timer_tick间隔时钟控制器swoole_timer_after指定时间后执行swoole_timer_clear删除定时器示例代码://每3000ms触发一次$timer_id=swoole_timer_tick(3000,function(){echo"tick3000ms-".date('Y-m-dH:i:s')."\n";});//9000ms后删除定时器swoole_timer_after(9000,function()use($timer_id){echo"9000ms后-".date('Y-m-dH:i:s')."\n";swoole_timer_clear($timer_id);});运行结果:tick3000ms-2019-04-0721:36:56tick3000ms-2019-04-0721:36:59tick3000ms-2019-04-0721:37:02after9000ms-2019-04-0721:37:02应用场景1.比如每天早上运行一个业务脚本,脚本中包含对其他业务方或者第三方接口的请求,如果接口超时没有响应或者没有返回数据,则重试必需的。重试机制为:每5分钟发送一次请求,最多尝试5次,5次内成功停止任务,5次后仍失败则停止任务。示例代码:$api_url='xxx';//接口地址$exec_num=0;//执行次数swoole_timer_tick(5*60*1000,function($timer_id)use($api_url,&$exec_num){$exec_num++;$result=$this->requestUrl($api_url);echodate('Y-m-dH:i:s')."Executingtask...(".$exec_num.")\n";if($result){//业务代码...swoole_timer_clear($timer_id);//停止定时器echodate('Y-m-dH:i:s')."第(".$exec_num.")个请求接口任务执行成功\n";}else{if($exec_num>=5){swoole_timer_clear($timer_id);//停止定时器echodate('Y-m-dH:i:s')."请求接口失败,已失败5次,停止执行\n";}else{echodate('Y-m-dH:i:s')."请求接口失败,5分钟后重试\n";}}});运行结果:2019-04-0721:40:48正在执行任务...(1)2019-04-0721:40:48请求接口失败,5分钟后重试2019-04-0721:45:48正在执行任务...(2)2019-04-0721:45:48请求接口失败,5分钟后重试2019-04-0721:50:48正在执行任务...(3)2019-04-0721:50:48请求接口失败,5分钟后重试2019-04-0721:55:48正在执行任务...(4)2019-04-0721:55:48请求失败界面,5分钟后重试2019-04-0722:00:48任务中...(5)2019-04-0722:00:48请求接口失败,失败5次,停止执行2.例如设计一个系统LinuxCrontab,使用WEB界面管理定时任务。最小时间粒度为分钟。PHPSwoole的最小时间粒度为毫秒级。012345|||||||||||+------星期几(0-6)(星期日=0)||||+------月(1-12)|||+--------月中的第几天(1-31)||+------------小时(0-23)|+-----------min(0-59)+----------------sec(0-59)WEB界面管理登录,权限管理任务管理(增删改查)脚本机器管理(机器IP地址)任务日志架构图项目地址https://github.com/osgochina/...3.比如监控服务器状态。参考文档https://wiki.swoole.com/wiki/...推荐阅读系统详解-SSO单点登录系统详解-PHPWEB安全防御系统详解-PHP缓存技术系统详解-PHP接口签名验证系统讲解-PHP浮点高精度运算一起学习
