Gateway::bindUid
說(shuō)明:
void Gateway::bindUid(string $client_id, mixed $uid);
將client_id與uid綁定,以便通過(guò)Gateway::sendToUid($uid)
發(fā)送數(shù)據(jù),通過(guò)Gateway::isUidOnline($uid)
用戶(hù)是否在線(xiàn)。
uid解釋?zhuān)哼@里uid泛指用戶(hù)id或者設(shè)備id,用來(lái)唯一確定一個(gè)客戶(hù)端用戶(hù)或者設(shè)備。
注意:
1、uid與client_id是一對(duì)多的關(guān)系,系統(tǒng)允許一個(gè)uid下有多個(gè)client_id。
2、但是一個(gè)client_id只能綁定一個(gè)uid,如果綁定多次uid,則只有最后一次綁定有效。
2、如果業(yè)務(wù)需要一對(duì)一的關(guān)系,可以通過(guò)Gateway::getClientIdByUid($uid)
獲得某uid已經(jīng)綁定的所有client_id,然后調(diào)用closeClient($client_id)
踢掉之前的client_id。
3、client_id下線(xiàn)(連接斷開(kāi))時(shí)會(huì)自動(dòng)執(zhí)行解綁,開(kāi)發(fā)者無(wú)需調(diào)用Gateway::unbindUid解綁。
4、如果某個(gè)uid對(duì)應(yīng)的所有client_id都下線(xiàn)了,則調(diào)用Gateway::isUidOnline($uid)
將返回0,即uid不在線(xiàn)。
5、uid和client_id映射關(guān)系存儲(chǔ)在Gateway進(jìn)程內(nèi)存中。
6、調(diào)用Gateway::bindUid($client_id, $uid)
的時(shí)機(jī)一般是在驗(yàn)證連接合法性的時(shí)候。例如客戶(hù)端連上服務(wù)端后,發(fā)送的第一個(gè)數(shù)據(jù)包應(yīng)當(dāng)包含客戶(hù)端的鑒權(quán)信息(例如用戶(hù)名密碼或者可用于鑒權(quán)的token),服務(wù)端通過(guò)鑒權(quán)信息確定該連接屬于哪個(gè)uid,然后調(diào)用Gateway::bindUid($client_id, $uid)
綁定。
參數(shù)
$client_id
客戶(hù)端的client_id
$uid
uid,可以是數(shù)字或者字符串。
返回值
無(wú)返回值
范例
use \GatewayWorker\Lib\Gateway;
class Events
{
...
public static function onMessage($client_id, $message)
{
// $message = '{"type":"login","uid":"xxxxx"}'
$req_data = json_decode($message, true);
Gateway::bindUid($client_id, $req_data['uid']);
}
...
}