設(shè)備登錄后綁定對(duì)應(yīng)的設(shè)備和clientid,稱此時(shí)的clientid為id1,設(shè)備30分鐘會(huì)發(fā)送一次登錄指令,當(dāng)設(shè)備再次發(fā)送登錄指令時(shí),有時(shí)候會(huì)出現(xiàn)clientid不一樣的情況,稱此時(shí)的clientid為id2,,那么此時(shí)就出現(xiàn)了一臺(tái)設(shè)備,兩個(gè)clientid的情況,此時(shí)設(shè)備的心跳指令會(huì)在id2的通道進(jìn)行收發(fā),那么超時(shí)之后,id1就會(huì)觸發(fā)onclose。觸發(fā)onclose時(shí),會(huì)更新數(shù)據(jù)庫(kù)里面設(shè)備的狀態(tài),這樣就會(huì)出現(xiàn)設(shè)備在線,但數(shù)據(jù)庫(kù)里面的設(shè)備離線的情況,所以我需要在onclose里面需要判斷設(shè)備是否綁定有多個(gè)clientid,如果有多個(gè)則不去更新數(shù)據(jù)庫(kù)設(shè)備的狀態(tài),我該如何判斷呢?可以調(diào)用Gateway::getClientIdByUid這個(gè)函數(shù)嗎?
第二次登陸把 clientID2 存到庫(kù)里邊 覆蓋clientid1
我這邊clientid并沒有寫入數(shù)據(jù)庫(kù)的操作,我可以在登錄時(shí)調(diào)用Gateway::getClientIdByUid,
如果返回的clientid和當(dāng)前clientid不一致,將之前的clientid進(jìn)行解綁,這樣可以嗎?如果解綁了,$session還有效嗎?
或者我通過(guò)Gateway::closeClient($client_id)將第一次登錄的clientid關(guān)閉?
現(xiàn)在是設(shè)備新的登錄指令過(guò)來(lái)了但是之前的clientid還沒有掉線,在心跳檢測(cè)時(shí)間內(nèi),兩個(gè)clientid同時(shí)存在的情況
你這是邏輯處理的問題, 第一次登陸 存$_SESSION信息(設(shè)備序列號(hào)啥的), 第二次登陸 判斷session是否設(shè)置了信息, 設(shè)置則不處理
第二次登錄后clientid已經(jīng)變了,是不是意味著通道也變了,那么第一次登錄的clientid所在的通道的session在第二次登錄的clientid里面,是無(wú)法讀取吧
這邊也不太清楚,可能涉及到設(shè)備的問題,我這邊監(jiān)控onmessage里面的信息,發(fā)現(xiàn)設(shè)備在未斷開的時(shí)候,發(fā)送了一條新的登錄指令過(guò)來(lái),新的clientid
一般做法如下:
1、設(shè)備上線時(shí)用Gateway::bindUid($client_id, $device_id);
將client_id與設(shè)備id綁定
2、client_id斷開時(shí)通過(guò)Gateway::isUidOnline($device_id);
判斷設(shè)備是否離線
3、給設(shè)備發(fā)送數(shù)據(jù)的時(shí)候直接用Gateway::sendToUid($device_id);
發(fā)送數(shù)據(jù)
client_id是臨時(shí)數(shù)據(jù),不應(yīng)該存數(shù)據(jù)庫(kù)