session是不是非常影響并發(fā)性能,如果重寫session存儲(chǔ)到redis中,該如何重寫?
$resultmsg=;
//校驗(yàn)提交參數(shù)
$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,后面所有交互都要驗(yàn)證isUidOnline;
$bindrt = Gateway::bindUid($client_id, $userid);
//加入默認(rèn)聊天群組與org_code組
Gateway::joinGroup($client_id, $message_data.'_'.$message_data);
//存儲(chǔ)用戶信息至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
));
Gateway::setSession內(nèi)部會(huì)產(chǎn)生短連接請求,壓測過程中如果內(nèi)核沒有優(yōu)化好可能造成大量time_wait連接,導(dǎo)致本地端口被占用光,導(dǎo)致請求便忙。
操作session的話最好用$_SESSION變量來操作,這樣是長連接,不會(huì)有上述問題。
我筆記本壓測沒加sessionQPS 4w,加了session隨機(jī)讀寫仍然是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");
}
}