swoole基础之毫秒定时器

        在平常的开发中,我们最常用的方式处理,是使用linux提供的crontab功能进行定时处理.但是很明显它有一个缺陷,那就是时间的粒度只能是分钟级别的,如果想使用秒级的就不行了,这个时候我们的基于swoole的毫秒定时器就可以很好的解决这个问题.

 

       系统提供了三个函数供调用: swoole_timer_tick,swoole_timer_after,swoole_timer_clear

        swoole_timer_tick:

设置一个间隔时钟定时器,与after定时器不同的是tick定时器会持续触发,直到调用swoole_timer_clear清除。

int swoole_timer_tick(int $msec, callable $callback);
$msec 指定时间,单位为毫秒。如1000表示1秒,最大不得超过 86400000
$callback_function 时间到期后所执行的函数,必须是可以调用的
可以使用匿名函数的use语法传递参数到回调函数中
定时器仅在当前进程空间内有效
定时器是纯异步实现的,不能与阻塞IO的函数一起使用,否则定时器的执行时间会发生错乱

定时器在执行的过程中可能存在一定误差

            允许传递一个timer_id供时钟销毁使用

 

        swoole_timer_after:

在指定的时间后执行函数,需要1.7.7或更高版本。

int swoole_timer_after(int $after_time_ms, mixed $callback_function);
swoole_timer_after函数是一个一次性定时器,执行完成后就会销毁。此函数与PHP标准库提供的sleep函数不同,after是非阻塞的。而sleep调用后会导致当前的进程进入阻塞,将无法处理新的请求。

执行成功返回定时器ID,若取消定时器,可调用 swoole_timer_clear

$after_time_ms 指定时间,单位为毫秒,最大不得超过 86400000
$callback_function 时间到期后所执行的函数,必须是可以调用的。
可以使用匿名函数的use语法传递参数到回调函数中

 

        swoole_timer_clear:

使用定时器ID来删除定时器。

bool swoole_timer_clear(int $timer_id)
$timer_id,定时器ID,调用swoole_timer_tick、swoole_timer_after后会返回一个整数的ID
swoole_timer_clear不能用于清除其他进程的定时器,只作用于当前进程

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
TP6(ThinkPHP 6)是一个基于PHP的高性能、简洁的开发框架,而Swoole是一个PHP的异步、并发的网络通信框架。TP6结合Swoole可以实现秒级的定时任务。 要实现TP6中的Swoole定时器,可以按照以下步骤进行操作: 1. 首先,在TP6项目中安装Swoole扩展包,可以使用composer命令进行安装。引用 2. 然后,创建一个定时任务的类,可以在该类中定义需要执行的定时任务的逻辑。该类需要继承`\think\swoole\coroutine\Task`类,并实现`handle`方法。在`handle`方法中编写具体的定时任务逻辑。 3. 在TP6的配置文件中配置Swoole定时器,可以在`config/swoole.php`文件中进行配置。在`timer`选项中,可以定义定时任务的执行时间间隔和需要执行的任务类。可以配置多个定时任务。 4. 启动Swoole服务器,在启动命令中加上`--with-timer`选项,这样Swoole服务器就会自动启动定时器,并按照配置的时间间隔执行定时任务。 通过以上步骤,就可以在TP6中使用Swoole定时器实现秒级的定时任务了。请根据实际需求和具体情况进行配置和编码。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [使用swoole 定时器变更超时未支付订单状态的解决方案](https://download.csdn.net/download/weixin_38667849/12938839)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [thinkphp6+swoole实现crontab项目定时任务](https://blog.csdn.net/u010192444/article/details/126757577)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值