有人問這個問題,在這里解答下,作為知識沉淀,方便其他人查閱。
問:
GatewayWorker中有client_id又有uid,client_id和uid分別是指什么?它們之間是什么關(guān)系?
區(qū)別
client_id實際上是一個socket連接id,用來全局(整個服務(wù)器集群)唯一標(biāo)識一個socket通訊通道。
uid也就是user_id,用來唯一標(biāo)識一個用戶,類似于QQ號碼。
為什么要用兩種id?
拿QQ來舉例,QQ允許手機和PC同時在線,那么就有兩個通訊通道,也就是兩個client_id。
如果只想給手機QQ發(fā)消息,那么只需要調(diào)用Gateway::sendToClient('當(dāng)前手機QQ的client_id', $message)
如果想給手機和PC同時發(fā)消息,則需要調(diào)用 Gateway::sendToUid(‘QQ’,$message);
總結(jié):
client_id可以看做是一個通訊通道的id,可以指定具體通道推送數(shù)據(jù)。
當(dāng)用戶下線時,對應(yīng)的通道id也就是client_id也就失效了,用戶重新上線時會重新分配一個未使用的client_id標(biāo)記當(dāng)前的通訊通道。也就是說client_id是有生命周期的。
uid是一個用戶的唯一id,這個id一般永遠有效。
另外一般現(xiàn)有系統(tǒng)都有自己的用戶id系統(tǒng),當(dāng)gatewayWorker要和這個系統(tǒng)結(jié)合時,可以使用bindUid($client_id, $uid)將用戶與通道綁定,就可以方便的通過uid和用戶通訊了。
大佬你好 如果不使用GatewayWorker 的客戶端 只使用服務(wù)端 其他語言能通過websorket協(xié)議直接調(diào)用嗎