Timer::after用于一次性延迟执行,适合延迟操作如5秒后关闭连接,执行后自动销毁;Timer::tick用于周期性重复执行,适合心跳上报、定期清理等任务,需手动清除才能停止。两者共用事件循环,但生命周期不同:after自动释放,tick需调用clear停止。

Swoole的Timer::after和Timer::tick虽然都是用于定时任务,但它们在执行逻辑和使用场景上有本质区别。
Timer::after:一次性延迟执行
这个方法用于在指定毫秒后执行一次回调函数。它相当于设置一个“延时任务”,时间到了就触发一次,然后自动销毁。
- 只执行一次
- 适合做延迟操作,比如5秒后关闭连接、100ms后重试请求
- 底层基于最小堆管理定时器,到期后自动移除
Timer::tick:周期性重复执行
这个方法会每隔指定毫秒执行一次回调,属于周期性任务,除非手动清除,否则会一直运行。
- 反复执行,按固定间隔触发
- 适合做轮询、心跳上报、定期清理等持续性任务
- 每次触发后重新入堆,等待下一次调度
本质上,after是单次定时器,tick是循环定时器。两者共用Swoole的全局事件循环,但生命周期管理不同:after执行完自动释放ID,而tick需调用clear手动停止。
基本上就这些,用哪个取决于你要执行的任务是一次性的还是周期性的。










