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

$_SESSION覆蓋存儲(chǔ)是不是有問題?

shad4ever

在onMessage里面有如下代碼片段:

if (!isset($_SESSION))
{
    $_SESSION = 0;
}

$lastMsgId = $_SESSION;
$curMsgId = $lastMsgId + 1;
$msgId = $msg->getMsgId();
if ($msgId != $curMsgId)
{
    // 客戶端消息ID從1開始
    // 消息ID不連續(xù),關(guān)閉連接
    LocalLogger::warning(__FILE__, __LINE__, "HallService::onMessage msg $msgId curMsg $curMsgId Error data from client $client_id .");
    Gateway::closeClient($client_id);
    return;
}

$_SESSION += 1;

假如客戶端連續(xù)發(fā)送兩條消息,第二條消息中的lastReceivedMsgId字段有幾率會(huì)來不及更新的,取的是老的數(shù)據(jù),目前我們的解決方法是直接在進(jìn)程中用clientId作為key值的數(shù)組去保存可以解決。這里是想和作者探討下這樣設(shè)計(jì)是有什么用途?或者在響應(yīng)同一客戶端的請(qǐng)求的時(shí)候,是不是不用覆蓋的方式用增量更新的方式更為妥當(dāng)?

3801 2 0
2個(gè)回答

walkor 打賞

session的存儲(chǔ)是異步非阻塞的,如果一個(gè)client快速連續(xù)更新session,可能會(huì)有session更新不及時(shí),讀到舊的session的問題,目前的解決方法是在需要連續(xù)更新session使用session的地方,用Gateway::getSession($client_id) 同步阻塞的方法獲取session。也就是在使用session前寫一句$_SESSiON = Gateway::getSession($client_id);,onMessage回調(diào)里寫一句即可。

  • 暫無評(píng)論
shad4ever

好的,感謝!

  • 暫無評(píng)論
年代過于久遠(yuǎn),無法發(fā)表回答
??