鍍金池/ 問答/PHP/ workerman中g(shù)atewayworker的isUidOnline($uid

workerman中g(shù)atewayworker的isUidOnline($uid)判斷不在線。

問題一:worker大神,我這邊的設(shè)備已經(jīng)成功登陸了,并綁定了uid,在接受心跳指令的時候,我這邊做了一個uid是否在線的判斷,但是設(shè)備在第一次成功登陸,并發(fā)送心跳過來時,Gateway::isUidOnline($uid)總是判斷不在線,當(dāng)設(shè)備重新登陸后,再發(fā)送心跳時,Gateway::isUidOnline($uid)會判斷在線,我打印了$client_idarr,即uid綁定的clientid;
Gateway::bindUid($client_id,$uid);
$client_idarr = Gateway::getClientIdByUid($uid);
發(fā)現(xiàn)該變量有值,那么設(shè)備應(yīng)該是成功綁定client_id了,也打印了uid,發(fā)現(xiàn)uid也正常,但是Gateway::isUidOnline($uid)卻還是判斷不在線,還有一點就是并不是所有設(shè)備都有這種情況,還請大神賜教

問題二:
$gateway->pingInterval = 55;
$gateway->pingNotResponseLimit = 2;

$gateway->pingInterval = 110;
$gateway->pingNotResponseLimit = 1;
有什么不同嗎?

回答
編輯回答
心夠野

問題一:

    public static function isUidOnline($uid)
    {
        return (int)static::getClientIdByUid($uid);
    }

isUidOnline是基于getClientIdByUid實現(xiàn)的,所以如果Gateway::getClientIdByUid($uid);有值,那么isUidOnline肯定會返回非0的值,同時打印下isUidOnline和getClientIdByUid的返回值看下。

問題二:
根據(jù)手冊

$gateway->pingInterval = 55;
$gateway->pingNotResponseLimit = 2;

代表服務(wù)端每55秒給客戶端發(fā)送一次心跳(pingData有值的情況下),如果客戶端55*2=110秒內(nèi)沒有任何數(shù)據(jù)發(fā)來,則代表客戶端已經(jīng)掉線,服務(wù)端執(zhí)行關(guān)閉連接

$gateway->pingInterval = 110;
$gateway->pingNotResponseLimit = 1;

則是110秒發(fā)送一次心跳給客戶端,同樣是110秒內(nèi)沒有任何數(shù)據(jù)發(fā)來,則代表客戶端已經(jīng)掉線,服務(wù)端執(zhí)行關(guān)閉連接

手冊:http://doc2.workerman.net/hea...

2018年6月21日 17:40