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