GatewayWorker做物聯(lián)網(wǎng)項(xiàng)目,在 Events.php 的 onConnect 中加一個5秒的定時器,用于清除沒有認(rèn)證的連接。正常情況下這個定時器工作正常,但一遇到大量并發(fā)鏈接,比如一秒幾十個鏈接,這個定時器就不起作用了(數(shù)據(jù)庫中沒有 tmp_int2=2的記錄, 1為連接 2為定時器刪除連接 3為成功認(rèn)證后刪除定時器),導(dǎo)致大量的無效連接的存在, 影響正常設(shè)備的通訊。麻煩給指導(dǎo)一下,看看什么原因,怎么解決。
public static function onConnect($client_id)
{
$_SESSION['auth_timer_id'] = Timer::add(5, function($client_id){
Gateway::closeClient($client_id);
self::$db->insert( ['tmp_int1'=>time(),'tmp_int2'=>2,'tmp_var1'=>$client_id],'yoo_p_tmp');
}, array($client_id), false);
self::$db->insert( ['tmp_int1'=>time(),'tmp_int2'=>1,'tmp_var1'=>$client_id,'tmp_var2'=>$_SERVER['REMOTE_ADDR'].':'.$_SERVER['REMOTE_PORT']],'yoo_p_tmp');
}