GatewayWorker中client_id和uid之间的关系

有人问这个问题,在这里解答下,作为知识沉淀,方便其他人查阅。
问:
GatewayWorker中有client_id又有uid,client_id和uid分别是指什么?它们之间是什么关系?
已邀请:

walkor

赞同来自: jbking creazythreeone

区别
client_id实际上是一个socket连接id,用来全局(整个服务器集群)唯一标识一个socket通讯通道。

uid也就是user_id,用来唯一标识一个用户,类似于QQ号码。

为什么要用两种id?
拿QQ来举例,QQ允许手机和PC同时在线,那么就有两个通讯通道,也就是两个client_id。
如果只想给手机QQ发消息,那么只需要调用Gateway::sendToClient('当前手机QQ的client_id', $message)
如果想给手机和PC同时发消息,则需要调用 Gateway::sendToUid(‘QQ’,$message);

总结:
client_id可以看做是一个通讯通道的id,可以指定具体通道推送数据。
当用户下线时,对应的通道id也就是client_id也就失效了,用户重新上线时会重新分配一个未使用的client_id标记当前的通讯通道。也就是说client_id是有生命周期的。

uid是一个用户的唯一id,这个id一般永远有效。

另外一般现有系统都有自己的用户id系统,当gatewayWorker要和这个系统结合时,可以使用bindUid($client_id, $uid)将用户与通道绑定,就可以方便的通过uid和用户通讯了。

chinaxhjsz

赞同来自:

大佬我想解决下 workerman 存入session的问题 我很急 大佬可以帮我解决下吗 QQ 602760880 已经好久了

shiqingyu

赞同来自:

大佬你好 如果不使用GatewayWorker 的客户端 只使用服务端 其他语言能通过websorket协议直接调用吗

walkor

赞同来自:

可以

要回复问题请先登录注册