在测试onMessage里面写Timer发现无法清除,这让我很郁闷。
代码1:
use \GatewayWorker\Lib\Gateway;
use \GatewayWorker\Lib\Store;
use \GatewayWorker\Lib\Db;
use \Workerman\Lib\Timer;
class Event{
public static function onMessage($client_id, $message)
{
switch($message_data)
{
case ‘re_login’:
$_SESSION = $time_interval=10;
Timer::add($time_interval, function(){
var_dump('timer1-work');
});
}
}
public static function onClose($client_id)
{
Timer::del($_SESSION );
}
}
代码二:
class Event{
public static function onMessage($client_id, $message)
{
switch($message_data)
{
case ‘re_login’:
$_SESSION = $time_interval=10;
Timer::add($time_interval, function(){
var_dump('timer2-work');
});
}
}
public static function onClose($client_id)
{
Timer::delAll();
}
}
}}}
以上两种貌似都是判断客户端进入和退出时的操作,刚开始测试可以。但客户端进出频繁时,定时器会并发。清除不了。大神来帮本菜鸟分析一下呗。
$_SESSION = $time_interval=10;
你这句把$_SESSION写死了固定是10了,Timer::del($_SESSION ); 当然无效
这个你要自己面壁去了,就几行代码自己都看不出这么明显的罗辑问题
另外:
businessWorker是多进程的,删除定时器和设定定时器的进程必须是同一个。
参考手册路由部分,使用示例二,将同一个client_id的请求绑定到同一个businessWorker上处理就ok了
http://www.workerman.net/gatewaydoc/gateway-worker-development/router.html
抱歉,我已经面壁了2小时。改了代码,但是还是无效。退出的时候还是无法清除是为什么呢
businessWorker是多进程的,删除定时器和设定定时器的进程必须是同一个。
参考手册路由部分,使用示例二,将同一个client_id的请求绑定到同一个businessWorker上处理就ok了
http://www.workerman.net/gatewaydoc/gateway-worker-development/router.html