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好像也不行,希望能帮忙解答
好像找到了问题所在,是我给businessworker开了4个进程,开一个就没有这个问题,但是该怎么解决多进程的问题呢,希望walker哥给点意见
参考路由章节,设置固定路由,让一个连接的数据都发到同一个worker上(可以直接用范例 2 随机绑定)
http://workerman.net/gatewaydoc/gateway-worker-development/router.html
timer_id也可以存储在$_SESSION中