問題一:worker大神,我這邊的設備已經(jīng)成功登陸了,并綁定了uid,在接受心跳指令的時候,我這邊做了一個uid是否在線的判斷,但是設備在第一次成功登陸,并發(fā)送心跳過來時,Gateway::isUidOnline($uid)總是判斷不在線,當設備重新登陸后,再發(fā)送心跳時,Gateway::isUidOnline($uid)會判斷在線,我打印了$client_idarr,即uid綁定的clientid;
Gateway::bindUid($client_id,$uid);
$client_idarr = Gateway::getClientIdByUid($uid);
發(fā)現(xiàn)該變量有值,那么設備應該是成功綁定client_id了,也打印了uid,發(fā)現(xiàn)uid也正常,但是Gateway::isUidOnline($uid)卻還是判斷不在線,還有一點就是并不是所有設備都有這種情況,還請大神賜教
問題二:
$gateway->pingInterval = 55;
$gateway->pingNotResponseLimit = 2;
和
$gateway->pingInterval = 110;
$gateway->pingNotResponseLimit = 1;
有什么不同嗎?
問題一:
個人感覺疑點有兩處:
(1)在調(diào)用到 Gateway::isUidOnline($uid) 時,確認下對應的client_id是否由于某種原因?qū)е乱严戮€了?
(2)Gateway::isUidOnline($uid) 判斷是否在線的邏輯,其實內(nèi)部調(diào)用的正是判斷 $client_idarr = Gateway::getClientIdByUid($uid) 【你可以參看源碼】,那么據(jù)你所述$client_idarr有值,有值就表明 client_id 肯定是在線的,否則還得回到疑點(1)
問題二:
(1)兩種寫法均代表: 若客戶端連接 pingInterval * pingNotResponseLimit = 110 秒內(nèi)沒有任何請求,則服務端認為對應客戶端已經(jīng)離線,服務端主動關(guān)閉連接并觸發(fā)onClose回調(diào)。
(2)區(qū)別是:心跳檢測間隔時間和檢測頻率不一樣。
@blogdaren一個是登錄指令,一個是心跳指令,登錄指令后uid綁定成功并打印出了對應的clientid,但是一分鐘之后的心跳指令發(fā)過來時,$client_idarr 卻沒有值了,對應了您的疑點一,現(xiàn)在問題就是并不清楚該設備為何會在綁定uid成功后短時間又掉線,因為并不是所有的設備都這樣,只有部分設備出現(xiàn)了這種情況,而且這部分設備也不是一直會出現(xiàn)這樣情況,只要多登陸幾次這種情況就會消失,但是設備斷電重啟后又會這樣,多登陸幾次又會變正常
不清楚你具體客戶端心跳邏輯以及服務端對心跳以及登錄邏輯的處理細節(jié),只能推測可能是:
我也是遇到這個問題
就是前端執(zhí)行一個心跳檢測 定時30秒內(nèi)發(fā)送一個數(shù)據(jù)到服務端維持連接
并我在心跳時候把獲取的東西都打印出來
獲取的數(shù)據(jù) 很迷惑 就是有時候 客戶端是否在線 Gateway::isOnline 返回是 0 Gateway::isUidOnline 用戶是否在線是 返回 是 1 源碼的 綁定用戶id的 Gateway::getClientIdByUid 返回有數(shù)組
還有就是幾個用戶同時連接 短時間內(nèi) 總一兩個掉線的...
想問一下作者解決了這個問題了嗎?
感謝作者回復 剛看了 好像只是執(zhí)行了一個gatewayWorker
10:01 0:00 _ WorkerMan: worker process YourAppGateway websocket://0.0.0.0:8282
root 26458 0.0 0.2 218508 9632 ? S 10:01 0:00 _ WorkerMan: worker process YourAppGateway websocket://0.0.0.0:8282
root 26459 0.0 0.3 220552 11688 ? S 10:01 0:02 _ WorkerMan: worker process YourAppGateway websocket://0.0.0.0:8282
root 26460 0.0 0.2 218504 9632 ? S 10:01 0:00 _ WorkerMan: worker process YourAppGateway websocket://0.0.0.0:8282