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

timer定時器問題 不能清除定時器

jay807750811

問題描述:

public static function onClose($client_id){ 

        $timer_id = Timer::add(5, function($online_uid,$room_id,$redis){

              ....略...
        },array($online_uid,$room_id,$redis),false);

//echo $time_id;        //打印出72
$redis->SET("offline_timer:{$online_uid}",$timer_id);

}

 public static function onMessage($client_id, $message){
            ....略...
            $timer_id = $redis->GET("offline_timer:{$online_uid}");
            // echo $time_id     //打印出72
            $result = Timer::del($timer_id);
}

我在onClose里面創(chuàng)建了一個定時器,在5秒之后去實現(xiàn)一些功能,但是如果我想在這段等待的時間內(nèi)想取消這個定時器,發(fā)現(xiàn)不能清除,在5秒之后還是執(zhí)行了定時器里面的操作。我創(chuàng)建定時器之后和在刪除定時器之前分別打印time_id,發(fā)現(xiàn)是一樣的,理論上我想刪除的定時器是用一個,這是什么原因?

6524 1 0
1個回答

walkor 打賞

Worker是多進程的,
進程1設(shè)置的定時器,
在進程2是無法刪除的。

  • 啊噠梨 2017-12-06

    跨進程刪除定時器有解決方案嗎?

  • walkor 2017-12-06

    1、業(yè)務(wù)想辦法把定時器添加和刪除放在同一個進程。
    2、用channel做進程間通訊
    3、利用外部存儲(redis等)存儲定時器一個狀態(tài),刪除定時器的時候刪除存儲的狀態(tài)。定時器運行時讀下狀態(tài)決定是否刪除當前定時器或者是否運行定時器

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