GatewayWorker做物联网项目,在 Events.php 的 onConnect 中加一个5秒的定时器,用于清除没有认证的连接。正常情况下这个定时器工作正常,但一遇到大量并发链接,比如一秒几十个链接,这个定时器就不起作用了(数据库中没有 tmp_int2=2的记录, 1为连接 2为定时器删除连接 3为成功认证后删除定时器),导致大量的无效连接的存在, 影响正常设备的通讯。麻烦给指导一下,看看什么原因,怎么解决。
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');
}
大并发装要event扩展,优化linux内核,然后restart重启gatewayWorker
你的服务器是windows系统吗?建议使用Linux
服务器是 linux 的 PHP 的 event 扩展没装, 我装上试试再说, 谢谢回复。