计时器嵌套会不会出现问题?

nimda

预期的效果:通过 gateway 向已建立连接的客户端设备发送指令,但由于客户端接收不同指令的时间有1s的限制,所以需要进行延时。
 实现方式:目前能够想到的实现方式有两种,一是人为延时,即采用 sleep(1) 指令,代码如下:

Timer::add($timer, function()use($instrs, $timer) {

    foreach ($instrs as $instr) {
        $uid = $instr;
        $ins = $instr;
        Gateway::sendToUid($uid, hex2bin($ins));
        sleep(1);
    }            

});    

但这种实现方式容易出现服务端 worker busy 的现象,于是想到了另一种实现方式,即计时器嵌套,代码如下:

            Timer::add($timer, function()use($instrs) {

                $i = 0;
                $count = count($instrs);
                $timer_id = Timer::add(1, function()use($instrs, &$timer_id, &$i, &$count)
                {                     
                    $uid = $instrs;
                    $ins = $instrs;
                    Gateway::sendToUid($uid, hex2bin($ins));    
                    $i++;

                    // 删除定时器
                    if($i >= $count){
                        Timer::del($timer_id);
                    }

                });            

            });

疑问:现在这种方式频繁添加删除定时器,而且出现定时器嵌套,是否会出现什么不良影响,如服务器负担加重或其他的什么问题?

2681 1 0
1个回答

xiuwang

用过定时器嵌套没有啥不良影响,放心用吧。

  • 暂无评论
年代过于久远,无法发表回答
🔝