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

關(guān)于斷開(kāi)客戶(hù)端連接后,Events::onClose 中調(diào)用 Gateway::getUidByClientId 返回空值null問(wèn)題

phpcreeper

問(wèn)題重現(xiàn):

模擬一客戶(hù)端成功與服務(wù)器建立連接
事先在 Events::onConnect 中調(diào)用 Gateway::bindUid
Events::onClose 中調(diào)用 Gateway::getUidByClientId
模擬斷開(kāi)客戶(hù)端連接,結(jié)果 Gateway::getUidByClientId 返回空值null

[attach]1194[/attach]

問(wèn)題調(diào)試:
如圖 return 斷點(diǎn)調(diào)試,發(fā)現(xiàn)能如期獲取到映射的uid, 個(gè)人理解原因是:
$this->sendToWorker 異步通知 Events,BusinessWorker異步收到轉(zhuǎn)發(fā)來(lái)的數(shù)據(jù),
導(dǎo)致 Events::onClose 業(yè)務(wù)邏輯可能尚未執(zhí)行,而斷點(diǎn)后的清理代碼已經(jīng)先行執(zhí)行完畢了,
不知道理解是否正確?如果理解正確,那么如題如何正確獲取到映射uid?

期望結(jié)果:
期望業(yè)務(wù)邏輯執(zhí)行完成后,再行斷點(diǎn)后的后續(xù)清理工作。

3909 1 0
1個(gè)回答

walkor 打賞

是的,連接斷開(kāi)后Gateway會(huì)立刻清理對(duì)應(yīng)連接的數(shù)據(jù),包括uid綁定數(shù)據(jù)。

在onClose回調(diào)中無(wú)法使用此接口,解決方法是bindUid時(shí)記錄一個(gè)$_SESSION=uid,Events::onClose的時(shí)候用$_SESSION來(lái)獲取uid。
但是仍然要注意$_SESSION一般是在onMessage/onWebSocketConnect里賦值的,但是onMessage/onWebSocketConnect在onClose調(diào)用前不一定會(huì)被調(diào)用,比如客戶(hù)端發(fā)起了tcp連接后未發(fā)送任何數(shù)據(jù)然后關(guān)閉了連接,類(lèi)似這種情況服務(wù)端Events ::onClose回調(diào)中不會(huì)有$_SESSION值,所以Events::onClose中獲取$_SESSION值需要判斷下uid鍵值是否存在。

在手冊(cè)中有提到,onClose回調(diào)中無(wú)法使用此接口,按照手冊(cè)方法用session來(lái)獲得

  • none 2019-09-25

    那這個(gè)問(wèn)題有什么解決方案嗎? 我也碰到了,目前我想的是在gateway里也存一個(gè)session

年代過(guò)于久遠(yuǎn),無(wú)法發(fā)表回答
??