如圖所示,我的兩臺設(shè)備50127和50128,在onMessage()里打印出對應(yīng)的client_id時,卻發(fā)現(xiàn)兩臺設(shè)備對應(yīng)的client_id一樣,之前一直沒遇到過這種情況。文檔中說client_id是唯一的,請問大神這是什么原因?qū)е碌模?/p>
理論上不應(yīng)該出現(xiàn)這種情況, 因為 gateway 的 client_id 唯一性策略是:??
gateway_local_ip + gateway_local_port + connection_id
能解釋一下這三個參數(shù)嗎?我又試了一下,出現(xiàn)這個問題可能跟我的方式有關(guān)。我是使用軟件模擬設(shè)備發(fā)送指令,軟件連接上后,接連發(fā)送不同設(shè)備的登錄指令,可能因為中間沒有斷開重連,所以client_id不一樣,我試了軟件連接后,發(fā)送設(shè)備指令,然后斷開重連,再發(fā)送另一臺設(shè)備指令,兩臺設(shè)備的client_id就不一樣了。
順次含義分別是:
大神,按照這個策略,如果我的設(shè)備在同一個局域網(wǎng)內(nèi),那么連到gateway進程的id會不會一樣啊,這樣的話client_id也就可能相同了
當連接同一個 gateway進程時, $connection_id 不可能相同;
當連接到不同的gateway進程時, $connection_id 可能相同;
@614:大神,還有一個問題,我的設(shè)備在登錄的時候會將設(shè)備id存入session,然后去更新我的數(shù)據(jù)庫,顯示已登錄,設(shè)備斷開的時候按照手冊說會出發(fā)onclose()函數(shù),我在該函數(shù)里面先根據(jù)session去取設(shè)備id,然后根據(jù)設(shè)備id去更新我數(shù)據(jù)庫里面的設(shè)備狀態(tài)。這是我目前的一個設(shè)備狀態(tài)更新邏輯,但是發(fā)現(xiàn)有部分設(shè)備出現(xiàn)了明明已經(jīng)掉線,但是卻并沒有更新數(shù)據(jù)庫的設(shè)備狀態(tài),現(xiàn)在懷疑是不是出發(fā)onclose()的時候沒有獲取到session值,請問大神有什么看法
邏輯看上去沒有什么問題,但是操作onclose回調(diào)要注意兩點:
1、確保任何斷必要情況下都能正常觸發(fā)該回調(diào),否則參看手冊心跳部分說明;
2、操作session 要用 $_SESSION,不能用 Gateway::getSession();
3、還有可能就是出現(xiàn)在你數(shù)據(jù)庫業(yè)務(wù)邏輯自身更新的環(huán)節(jié);
如果還不行,那只能你自己追蹤日志了,沒有上下文環(huán)境,更不好說了。