Swoole提供强大的异步毫秒定时器,基于timerfd+epoll实现。主要方法:
1、swoole_timer_tick:周期性定时器,类似于JavaScript里的`setInterval() `。
2、swoole_timer_after:一次性定时器。
3、swoole_timer_clear:清除定时器。
``` php
# 周期性定时器
int swoole_timer_tick(int $ms, callable $callback, mixed $user_param);
# 一次性定时器
swoole_timer_after(int $after_time_ms, mixed $callback_function, mixed $user_param);
# 清除定时器
bool swoole_timer_clear(int $timer_id)
# 定时器回调函数
function callbackFunction(int $timer_id, mixed $params = null);
```
注意:
- `$ms` 最大不得超过 86400000。
- manager进程中不能添加定时器。
- 建议在`WorkerStart`回调里写定时器。
定时器示例:
``` php
$server->on('WorkerStart', function (\swoole_server $server, $worker_id){
if ($server->worker_id == 0){//防止重复
//每隔2000ms触发一次
swoole_timer_tick(2000, function ($timer_id) {
echo "tick-2000ms\n";
});
//3000ms后执行此函数
swoole_timer_after(3000, function () {
echo "after 3000ms.\n";
});
}
});
```