十六、Swoole 基础学习笔记 - Swoole 毫秒定时器

作者: 温新

分类: 【Swoole 系列】

阅读: 1409

时间: 2023-03-13 11:20:25

hi,我是温新,一名PHPer

文章基于 Swoole 5.0.1 版本编写。

学习目标:掌握定时器的使用

说明:本篇文章结合官方文档编写及参考网络资料编写,虽非全部原创,但也是结合了自己的理解,若转载请附带本文 URL,编写不易,持续编写更不易,谢谢!

说明定时器,我们并不陌生,JS 中的 setintervalsettimeout。在实际开发中我们也是经常使用它。PHP 中的定时是秒级的,而 Swoole 提供了更为强大的毫秒级定时。

使用场景

在项目中,经常会遇到需要定时执行的脚本,如定时发送邮件、定时查看服务器状态、定时清理垃圾数据等。

Swoole 定时器性能

底层使用最小堆数据结构实现定时器,定时器的添加和删除,全部为内存操作,因此性能是非常高的。

Swoole 定时器案例

tick() - 设置一个间隔定时器

使用场景,监控系统资源。如检测系统内存使用率。

<?php
// 15-swoole-timer-tick.php
Swoole\Timer::tick(100, function () {
	echo 'hello swoole' . PHP_EOL;
});

after() - 延迟执行

使用场景,如用户登录后,过 2 分再发送邮件。

<?php
// 15-swoole-timer-after.php
// 1 秒后执行
Swoole\Timer::tick(100, function () {
	echo 'hello swoole' . PHP_EOL;
});

after,只会执行一次

clear() 清除定时器

<?php
// 15-swoole-timer-clear.php
    
$i = 0;

Swoole\TImer::tick(500, function ($timerId) use (&$i) {
    $i++;
    echo $i . ' Swoole ' . PHP_EOL;
    if ($i > 20) {
        Swoole\Timer::clear($timerId);
    }
});

本篇文章到此结束,我是温新,下篇文章继续学习 Swoole。

请登录后再评论