企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# 注意事项 ## 定时器使用注意事项 1、可以在任意位置使用定时器。全局的定时器推荐在`onWorkerStart`回调中设置,针对某个连接的定时器推荐在`onConnect`中设置。 2、添加的定时任务会启动新的协程执行,不会导致进程阻塞。 3、当前进程忙于其它业务时或者当一个任务没有在预期的时间运行完,这时又到了下一个运行周期,则会等待当前任务完成才会运行,这会导致定时器没有按照预期时间间隔运行。也就是说当前进程的业务都是串行执行的,如果是多进程则进程间的任务运行是并行的。 4、需要注意多进程设置了定时任务造可能会造成并发问题,例如下面的代码每秒会打印5次。 ~~~ use \Workerman\Worker; use \Workerman\Lib\Timer; require_once __DIR__ . '/Workerman/Autoloader.php'; Warriorman\Worker::rename(); $task= new Worker("tcp://0.0.0.0:2345"); $task->protocol = "\Workerman\Protocols\Http"; // 5个进程 $worker->count = 5; $worker->onWorkerStart = function($worker) { // 5个进程,每个进程都有一个这样的定时器 Timer::add(1, function(){ echo "hi\r\n"; }); }; Worker::runAll(); ~~~ 5、根据epoll超时实现,误差极小。 6、定时器不能跨进程删除,例如a进程设置的定时器无法在b进程直接调用Timer::del接口删除 7、不同进程间的定时器id可能会重复,但是同一个进程内产生的定时器id不会重复