Gateway::bindUid
說明:
void Gateway::bindUid(string $client_id, mixed $uid);
將client_id與uid綁定,以便通過Gateway::sendToUid($uid)
發(fā)送數(shù)據,通過Gateway::isUidOnline($uid)
用戶是否在線。
uid解釋:這里uid泛指用戶id或者設備id,用來唯一確定一個客戶端用戶或者設備。
注意:
1、uid與client_id是一對多的關系,系統(tǒng)允許一個uid下有多個client_id。
2、但是一個client_id只能綁定一個uid,如果綁定多次uid,則只有最后一次綁定有效。
2、如果業(yè)務需要一對一的關系,可以通過Gateway::getClientIdByUid($uid)
獲得某uid已經綁定的所有client_id,然后調用closeClient($client_id)
踢掉之前的client_id。
3、client_id下線(連接斷開)時會自動執(zhí)行解綁,開發(fā)者無需調用Gateway::unbindUid解綁。
4、如果某個uid對應的所有client_id都下線了,則調用Gateway::isUidOnline($uid)
將返回0,即uid不在線。
5、uid和client_id映射關系存儲在Gateway進程內存中。
6、調用Gateway::bindUid($client_id, $uid)
的時機一般是在驗證連接合法性的時候。例如客戶端連上服務端后,發(fā)送的第一個數(shù)據包應當包含客戶端的鑒權信息(例如用戶名密碼或者可用于鑒權的token),服務端通過鑒權信息確定該連接屬于哪個uid,然后調用Gateway::bindUid($client_id, $uid)
綁定。
參數(shù)
$client_id
客戶端的client_id
$uid
uid,可以是數(shù)字或者字符串。
返回值
無返回值
范例
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']);
}
...
}