centos7,4核8G,压测时如果不写session,qps可以达到6w,一旦读写session,qps只能到2500,请问如何提高并发?

zzas001

session是不是非常影响并发性能,如果重写session存储到redis中,该如何重写?

4432 3 0
3个回答

walkor

GatewayWorker业务代码可以发出来看看么?

zzas001
$resultmsg=;
//校验提交参数
$ParamArray = array('org_code', 'uid', 'user_role');
$postcheck = self::checkparam($message_data, $ParamArray);
if ($postcheck=='False') {
    $resultmsg='False';
    $resultmsg = $postcheck;
    return $resultmsg;
}

$resultmsg=$client_id;
$resultmsg=date('Y-m-d H:i:s');

$userid=$message_data;
//绑定用户UID与client_id,后面所有交互都要验证isUidOnline;
$bindrt = Gateway::bindUid($client_id, $userid);

//加入默认聊天群组与org_code组
Gateway::joinGroup($client_id, $message_data.'_'.$message_data);
//存储用户信息至session

$mysession = array(
    'default_group'=>$message_data.'_'.$message_data,
    'uid' => $message_data,
    'org_code' => $message_data,
    'user_role' => $message_data,
    'logindate' => date('Y-m-d H:i:s'),
    'bindclient' => 'True',
    'client_ip'=> $_SERVER
);

Gateway::setSession($client_id, array(
    'default_group'=>$message_data.'_'.$message_data,
    'uid' => $message_data,
    'org_code' => $message_data,
    'user_role' => $message_data,
    'logindate' => date('Y-m-d H:i:s'),
    'bindclient' => 'True',
    'client_ip'=> $_SERVER
));
  • 暂无评论
walkor

Gateway::setSession内部会产生短连接请求,压测过程中如果内核没有优化好可能造成大量time_wait连接,导致本地端口被占用光,导致请求便忙。
操作session的话最好用$_SESSION变量来操作,这样是长连接,不会有上述问题。
我笔记本压测没加sessionQPS 4w,加了session随机读写仍然是4wQPS,基本没变化。

下面是压测的代码

class Events
{
       public static function onMessage($client_id, $message) {
            $_SESSION = time();
            Gateway::sendToClient($client_id, "HTTP/1.1 200 OK\r\nConnection: keep-alive\r\nServer: workerman\r\nContent-Length: 5\r\n\r\nhello");
       } 
}
年代过于久远,无法发表回答
🔝