workerman Timer

onwnic

在 onWorkerStart 里面定义了 个全局的  global $_downTimer;
 
然后在 Timer 里面倒计时  代码如下

global $_downTimer;
$_downTimer = 60;
$_timer = Timer::add(1, function () use (&$_timer,&$_downTimer) {

    if($_downTimer == 0){
        Timer::del($_timer);
    }else{
        Gateway::sendToGroup(, json_encode());
        --$_downTimer;
    }
});

运行 :php artisan wk start 
然后进入房间后 timer 发送到客户端 是正常的 按每秒去递减,
之后我退出房间 在进去 ,那么问题来了:
Workerman 推送到客户端的 时间 会每秒打印 60,59,58 一次性可以推送3秒 或者更多过来  ,导致倒计时很快就走完了。
 
 
 

3143 1 0
1个回答

latin

因为开了多个进程啊,比如你开了3个进程,3个进程都定时向客户端发,那就一次推3个过来了

  • onwnic 2018-10-20

    不是进程问题,我只开了4个进程,我只在0号运行了 ,如果是进程问题,我第一次进来的时候为什么倒计时没问题,退出一次在进去 就会每秒推8,7,5,4 秒过来,然后再退出再进房间,就会一秒推8,7,6,5,4,3,2,1 感觉是乘以2

  • latin 2018-10-20

    你应该是在onConnect或者其它地方里面也加了定时器吧,你要把代码都贴出才好定位,一般都是自己业务代码问题

年代过于久远,无法发表回答
🔝