国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

定時器刪除了還是會存在

freely

使用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{
        //其它處理
    }
}

代碼如上
問題:當(dāng)刪除定時器后,又重新創(chuàng)建新的定時器時,反復(fù)幾次后,就會發(fā)現(xiàn)有些定時器沒有刪除停止掉,并且又新多了一些定時器出來。
這是為什么呢?啥原因呢?

1365 2 0
2個回答

liziyu

要不要重啟的!~

  • 暫無評論
latin

GatewayWorker手冊說了,
定時器中不要直接使用$_SESSION變量,因為定時器運行那一刻無法確定$_SESSION變量里存儲的值屬于哪個client_id。如果定時器里面需要獲得session,可以使用Gateway::getSession($client_id)獲取。

定時器自己刪除自己用

    // 注意,回調(diào)里面使用當(dāng)前定時器id必須使用引用(&)的方式引入
    $timer_id = Timer::add(1, function()use(&$timer_id)
    {
        static $i = 0;
        echo $i++."\n";
        // 運行10次后刪除定時器
        if($i === 10)
        {
            Timer::del($timer_id);
        }
    });
  • freely 2022-08-05

    嗯。謝了,根據(jù)這個來處理,已搞定了

  • freely 2022-08-05

    忘記了AOpen和CheckToken函數(shù)其實是已經(jīng)在定時器內(nèi)了,因為它們是個死循環(huán)的。

年代過于久遠,無法發(fā)表回答
??