Gateway::isUidOnline
說明:
int Gateway::isUidOnline(mixed $uid);
(需要Gateway版本>=2.0.4)
如何查看Gateway版本
判斷$uid
是否在線,此方法需要配合Gateway::bindUid($client_uid, $uid)
使用。
如果某uid沒有通過Gateway::bindUid($client_uid, $uid)
進(jìn)行任何綁定,那么對該uid調(diào)用Gateway::isUidOnline($uid)
將返回0。
如果某uid綁定的client_id都已經(jīng)下線,那么對該uid調(diào)用Gateway::isUidOnline($uid)
將返回0。
如果某uid綁定的client_id有至少有一個在線,那么對該uid調(diào)用 Gateway::isUidOnline($uid)
將返回1。
參數(shù)
$uid
uid,可以是數(shù)字或者字符串
返回值
uid在線返回1,不在線返回0
注意:如果是客戶端斷網(wǎng)斷電等極端情況掉線,客戶端的onClose回調(diào)可能無法及時觸發(fā),參見onClose說明。也就是說對應(yīng)客戶端出現(xiàn)斷網(wǎng)斷電等極端掉線情況返回值可能是1,而并非期待的0。這種情況需要心跳來檢測已經(jīng)掉線的客戶端。
范例
use \GatewayWorker\Lib\Gateway;
class Events
{
...
public static function onMessage($client_id, $message)
{
// $message = '{"type":"say_to_one","to_uid":100,"content":"hello"}'
$req_data = json_decode($message, true);
$uid = $req_data['to_uid'];
// 如果是向某個客戶端發(fā)送消息
if($req_data['type'] == 'say_to_one'))
{
// 如果不在線就先存起來
if(!Gateway::isUidOnline($uid))
{
// 假設(shè)有個your_store_fun函數(shù)用來保存未讀消息(這個函數(shù)要自己實現(xiàn))
your_store_fun($message);
}
else
{
// 在線就轉(zhuǎn)發(fā)消息給對應(yīng)的uid
Gateway::sendToUid($uid, $req_data['content']);
}
}
}
...
}