GatewayWorker搭了個WebSocket,在start_gateway.php把客戶端IP記錄到了$_SESSION里面(獲取不到有默認值),并且在onMessage把登錄后的用戶IP和設備信息寫到了數(shù)據(jù)庫,onMessage 、 onClose 都打了登錄后用戶日志,每天大概十萬個登錄的用戶里面會出現(xiàn)10個左右在onMessage里面獲取不到IP等情況,并且這些用戶沒有觸發(fā)過onClose,通過客戶端傳來的設備來看出問題的99%都是iPhone 6、 iPhone 7 、iPhone 8、iPad、iPhone X ,但是用戶大多數(shù)是安卓手機,蘋果系統(tǒng)里面iPhone 11比例較多卻沒有問題,查出問題的用戶登錄記錄基本只有一次出問題,其他段時間登錄記錄都正常能獲取到IP,onClose也有斷開日志,請問大概是什么原因有可能造成這個情況?
我猜想的一種可能:用戶連接后把設備信息發(fā)給了過來,onMessage里面正在處理著數(shù)據(jù)寫到數(shù)據(jù)庫的這個時候用戶斷開了,導致onMessage獲取不到用戶$_SESSION的IP,由于用戶斷開了onClose里面也獲取不到$_SESSION用戶信息所以也沒寫成功日志。
IP記錄再$_SESSION是在onMessage里記錄的?有可能客戶端連上了,然后沒發(fā)任何信息就斷開了,所以沒出發(fā)onMessage,沒有寫入數(shù)據(jù)
IP在start_gateway.php文件記錄到了$_SESSION里,且在 onMessage客戶端發(fā)消息過來時通過$_SESSION取得寫到數(shù)據(jù)庫,10萬個用戶里面 可能會出現(xiàn)10個在onMessage里面 獲取不到IP的情況,是否是用戶剛好發(fā)消息來onMessage正在處理的時候斷開了,然后處理到通過$_SESSION取IP的時候$_SESSION記錄的東西沒了。