在測(cè)試onMessage里面寫Timer發(fā)現(xiàn)無法清除,這讓我很郁悶。
代碼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();
}
}
}}}
以上兩種貌似都是判斷客戶端進(jìn)入和退出時(shí)的操作,剛開始測(cè)試可以。但客戶端進(jìn)出頻繁時(shí),定時(shí)器會(huì)并發(fā)。清除不了。大神來幫本菜鳥分析一下唄。
$_SESSION = $time_interval=10;
你這句把$_SESSION寫死了固定是10了,Timer::del($_SESSION ); 當(dāng)然無效
這個(gè)你要自己面壁去了,就幾行代碼自己都看不出這么明顯的羅輯問題
另外:
businessWorker是多進(jìn)程的,刪除定時(shí)器和設(shè)定定時(shí)器的進(jìn)程必須是同一個(gè)。
參考手冊(cè)路由部分,使用示例二,將同一個(gè)client_id的請(qǐng)求綁定到同一個(gè)businessWorker上處理就ok了
http://m.wtbis.cn/gatewaydoc/gateway-worker-development/router.html
businessWorker是多進(jìn)程的,刪除定時(shí)器和設(shè)定定時(shí)器的進(jìn)程必須是同一個(gè)。
參考手冊(cè)路由部分,使用示例二,將同一個(gè)client_id的請(qǐng)求綁定到同一個(gè)businessWorker上處理就ok了
http://m.wtbis.cn/gatewaydoc/gateway-worker-development/router.html