Events::onConnect
說明:
void Events::onConnect(string $client_id);
當(dāng)客戶端連接上gateway進(jìn)程時(shí)(TCP三次握手完畢時(shí))觸發(fā)的回調(diào)函數(shù)。
參數(shù)
$client_id
client_id固定為20個(gè)字符的字符串,用來全局標(biāo)記一個(gè)socket連接,每個(gè)客戶端連接都會被分配一個(gè)全局唯一的client_id。
如果client_id對應(yīng)的客戶端連接斷開了,那么這個(gè)client_id也就失效了。當(dāng)這個(gè)客戶端再次連接到Gateway時(shí),將會獲得一個(gè)新的client_id。也就是說client_id和客戶端的socket連接生命周期是一致的。
client_id一旦被使用過,將不會被再次使用,也就是說client_id是不會重復(fù)的,即使分布式部署也不會重復(fù)。
只要有client_id,并且對應(yīng)的客戶端在線,就可以調(diào)用Gateway::sendToClient($client_id, $data)
等方法向這個(gè)客戶端發(fā)送數(shù)據(jù)。
返回值
無返回值,任何返回值都會被視為無效的
注意
$client_id
是服務(wù)端自動生成的并且無法自定義。
如果開發(fā)者有自己的id系統(tǒng),可以用過Gateway::bindUid($client_id, $uid)
把自己系統(tǒng)的id與client_id綁定,綁定后就可以通過Gateway::sendToUid($uid)
發(fā)送數(shù)據(jù),通過Gateway::isUidOnline($uid)
用戶是否在線了。
onConnect事件僅僅代表客戶端與gateway完成了TCP三次握手,這時(shí)客戶端還沒有發(fā)來任何數(shù)據(jù),此時(shí)除了通過$_SERVER['REMOTE_ADDR']
獲得對方ip,沒有其他可以鑒別客戶端的數(shù)據(jù)或者信息,所以在onConnect事件里無法確認(rèn)對方是誰。要想知道對方是誰,需要客戶端發(fā)送鑒權(quán)數(shù)據(jù),例如某個(gè)token或者用戶名密碼之類,在onMesssge里做鑒權(quán)。
onConnect范例
use \GatewayWorker\Lib\Gateway;
class Events
{
public static function onConnect($client_id)
{
Gateway::sendToCurrentClient("Your client_id is $client_id");
}
}