怎么用GatewayWorker實現(xiàn)上述問題呢
Gateway::bindUid
說明:
void Gateway::bindUid(string $client_id, mixed $uid);
將client_id與uid綁定,以便通過Gateway::sendToUid($uid)發(fā)送數(shù)據(jù),通過Gateway::isUidOnline($uid)用戶是否在線。
uid解釋:這里uid泛指用戶id或者設(shè)備id,用來唯一確定一個客戶端用戶或者設(shè)備。
注意:
1、uid與client_id是一對多的關(guān)系,系統(tǒng)允許一個uid下有多個client_id。
2、但是一個client_id只能綁定一個uid,如果綁定多次uid,則只有最后一次綁定有效。
2、如果業(yè)務(wù)需要一對一的關(guān)系,可以通過Gateway::getClientIdByUid($uid)獲得某uid已經(jīng)綁定的所有client_id,然后調(diào)用closeClient($client_id)踢掉之前的client_id。
3、client_id下線(連接斷開)時會自動執(zhí)行解綁,開發(fā)者無需調(diào)用Gateway::unbindUid解綁。
4、如果某個uid對應(yīng)的所有client_id都下線了,則調(diào)用Gateway::isUidOnline($uid)將返回0,即uid不在線。
5、uid和client_id映射關(guān)系存儲在Gateway進程內(nèi)存中。
6、調(diào)用Gateway::bindUid($client_id, $uid)的時機一般是在驗證連接合法性的時候。例如客戶端連上服務(wù)端后,發(fā)送的第一個數(shù)據(jù)包應(yīng)當(dāng)包含客戶端的鑒權(quán)信息(例如用戶名密碼或者可用于鑒權(quán)的token),服務(wù)端通過鑒權(quán)信息確定該連接屬于哪個uid,然后調(diào)用Gateway::bindUid($client_id, $uid)綁定。
手冊里看到的,希望能幫到你