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