使用GatewayWorker,开启了10个进程
function OnMessage($client_id,$data){
    switch($data['cmd']){
        case 'open':{
            self::AOpen($client_id,$data);
            break;
        }
    }
}
function AOpen($client_id,$data){
    $token=$data['token'];
    $timerId=isset($_SESSION['timer_id'])?$_SESSION['timer_id']:'';
    if($timerId!=''){
        Timer::del($timerId);
    }
    timerId=Timer::add(5,function($client_id,$token){
        Common::CheckToken($client_id,$token);
    });
    $_SESSION['timer_id']=$timerId;
}
function CheckToken($client_id,$token){
    if($token=='5'){
        $NowtimerId=isset($_SESSION['timer_id'])?$_SESSION['timer_id']:'';
        Timer::del($NowtimerId);
        $token=self::getNewToken();//重新生成新的token
        $data=[
            'token'=>$token
        ];
        AOpen($client_id,$data);
    }else{
        //其它处理
    }
}代码如上
问题:当删除定时器后,又重新创建新的定时器时,反复几次后,就会发现有些定时器没有删除停止掉,并且又新多了一些定时器出来。
这是为什么呢?啥原因呢?
要不要重启的!~
GatewayWorker手册说了,
定时器中不要直接使用
$_SESSION变量,因为定时器运行那一刻无法确定$_SESSION变量里存储的值属于哪个client_id。如果定时器里面需要获得session,可以使用Gateway::getSession($client_id)获取。定时器自己删除自己用
嗯。谢了,根据这个来处理,已搞定了
忘记了AOpen和CheckToken函数其实是已经在定时器内了,因为它们是个死循环的。