在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)?