gateway定时器问题

253484087

walkor你好,我的项目由于业务需要,在onmessage里面需要用到定时器,但是使用的过程中发现定时器无法正常关闭,我的思路是这样的,在协议一里面出发一个五秒运行一次的定时器,把timer_id缓存到Store里面,然后在协议二里取出缓存的timer_id,删除这个timer_id,但是运行之后定时器还在跑,这是什么原因?
部分代码:
协议一:

$timer_id = Timer::add(5, function(){echo date('H:i:s',time()).'test begin!';}, array(), true);
$user_timers = Store::instance('gateway')->get('user_timers');
$user_timers[] = $timer_id;
Store::instance('gateway')->set('user_timers',$user_timers);

协议二:

$user_timers = Store::instance('gateway')->get('user_timers');
        if(!empty($user_timers)){
            foreach($user_timers as $val){
                   Timer::del($val);
            }
            unset($user_timers);
            Store::instance('gateway')->set('user_timers',$user_timers);
        }

试过使用delall好像也不行,希望能帮忙解答

3960 2 0
2个回答

253484087

好像找到了问题所在,是我给businessworker开了4个进程,开一个就没有这个问题,但是该怎么解决多进程的问题呢,希望walker哥给点意见

  • 暂无评论
walkor

参考路由章节,设置固定路由,让一个连接的数据都发到同一个worker上(可以直接用范例 2 随机绑定)
http://workerman.net/gatewaydoc/gateway-worker-development/router.html

timer_id也可以存储在$_SESSION中

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