国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

超全局?jǐn)?shù)組$_SESSION

$_SESSION是什么

GatewayWorker中的超全局?jǐn)?shù)組$_SESSION和PHP自身的$_SESSION功能基本相同。每個client_id對應(yīng)一個$_SESSION數(shù)組,$_SESSION數(shù)組中可以保存對應(yīng)客戶端的會話數(shù)據(jù),對應(yīng)的client_id的后續(xù)請求可以直接使用這個數(shù)組中的數(shù)據(jù),而不用去反復(fù)讀取存儲。

$_SESSION使用場景

例如客戶端鏈接GatewayWorker后,需要發(fā)送驗(yàn)證數(shù)據(jù)讓服務(wù)端驗(yàn)證是否合法,一般要傳遞一次用戶名和密碼數(shù)據(jù),然后在Gateway::onMessage($client_id, $message)中通過查詢數(shù)據(jù)庫驗(yàn)證$message中的用戶名密碼是否正確,如果正確就可以將用戶的uid寫入到$_SESSION中如$_SESSION['uid']=$uid;,那么當(dāng)這個client_id再次發(fā)來數(shù)據(jù)時(shí),要判斷這個客戶端是否是被驗(yàn)證過的,就可以用$_SESSION['uid']是否被設(shè)置來判斷。

$_SESSION使用注意事項(xiàng)

  • 使用$_SESSION時(shí)無需調(diào)用session_start等函數(shù),可直接使用
  • $_SESSION中無法保存資源類型的數(shù)據(jù)
  • $_SESSION數(shù)據(jù)保存在Gateway進(jìn)程內(nèi)存中,無磁盤IO,性能非常好
  • $_SESSION的生命周期與client_id對應(yīng)socket連接的生命周期相同,當(dāng)客戶端連接斷開后,對應(yīng)的客戶端$_SESSION將會清除
  • GatewayWorker中的$_SESSION與WebServer(PHP-FPM/Apache等)中的$_SESSION無法互通
  • 定時(shí)器中不要直接使用$_SESSION變量,因?yàn)槎〞r(shí)器運(yùn)行那一刻無法確定$_SESSION變量里存儲的值屬于哪個client_id。如果定時(shí)器里面需要獲得session,可以使用Gateway::getSession($client_id)獲取

$_SESSION實(shí)現(xiàn)原理

Gateway/Worker中,每個客戶端的$_SESSION數(shù)據(jù)是存儲在Gateway進(jìn)程內(nèi)存中的,每次Gateway進(jìn)程轉(zhuǎn)發(fā)消息給BusinessWorker進(jìn)程時(shí),都會順便攜帶上對應(yīng)客戶端的$_SESSION數(shù)據(jù)給BusinessWorker進(jìn)程,這時(shí)BusinessWorker進(jìn)程就能使用$_SESSION了。而當(dāng)$_SESSION數(shù)據(jù)有更改時(shí),BusinessWorker會將新的$_SESSION數(shù)據(jù)傳遞給Gateway進(jìn)程進(jìn)行保存。

示例

class Events
{
    public static function onMessage($client_id, $data)
    {
        // data={"type":"login", "uid":"666"}
        $data = json_decode($data, true);
        // 如果沒有$_SESSION['uid']說明客戶端沒有登錄
        if(!isset($_SESSION['uid']))
        {
            // 消息類型不是登錄視為非法請求,關(guān)閉連接
            if($data['type'] !== 'login')
            {
                return Gateway::closeClient($client_id);
            }
            // 設(shè)置session,標(biāo)記該客戶端已經(jīng)登錄
            $_SESSION['uid'] = $data['uid'];
        }
    }

}
編輯于2024-03-13 17:37:33 完善本頁 +發(fā)起討論
贊助商