关于用户ID与workerman自动生成的client_id映射

0

用户登录成功后,我将用户uid(唯一的)与client_id存放在一张表中(映射表)。当该用户再次登录时,按workerman运行机制,客户端连接到服务端,它又会自动生成一个client_id,当用户再次登录时,发给原来的client_id的信息就不能发送给该用户了。现在问题就是能否用映射表中的client_id替换掉再次登录workerman生成的client_id?还有client_id是在哪一步生成的?

已邀请:

walkor

赞同来自: coolbosyen xmfail 嗳上痞子轩

workerman中得client_id无法自定义,每次客户端连接workerman的那一时刻会生成一个新的全局唯一的clent_id。


如果你要加入uid的概念,可以做映射表,uid<->client_id,通讯的时候使用uid通讯,封装一个类似Gateway::sendToUid($uid, $message)的接口,接口内部实现就是通过uid查找client_id,然后调用workerman自己的Gateway::sendToClient($client_id, $message)发送


每次用户登录时把uid与client_id的映射关系写入数据库,用户退出时通过client_id把映射记录删除。uid与client_id可以一对多(也就是同一个用户支持多个客户端同时登录),也可以强制一对一(同一个用户只能登录一个客户端)

xmfail

赞同来自:

已按此流程完成了client_id与client_name的对应关系,并成功实现通过name来发送消息;

annydaniel

赞同来自:

判断用户是否在线可以使用$mes = Gateway::getClientIdByUid($uid); 根据用户uid可以实时查出用户的clientid

要回复问题请先登录注册