GatewayWorker高并发定时器失效

auki

问题描述

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');   
}
198 3 0
3个回答

six

大并发装要event扩展,优化linux内核,然后restart重启gatewayWorker

  • 暂无评论
释永战

你的服务器是windows系统吗?建议使用Linux

  • 暂无评论
auki

服务器是 linux 的 PHP 的 event 扩展没装, 我装上试试再说, 谢谢回复。

  • 暂无评论
🔝