本文讲述的是分布式音视频服务器之登陆.
设计上:
1)账号名请求登陆。在第一次登陆时需要进行完整的账号密码验证,验证通过后,正常登陆服务器后,为了简化登陆流程,客户端可以请求token,以便以后的快速登陆,在前端就表现为记密码登陆。
2)开始正常登陆。请求登陆验证成功后(不管是账号名请求登陆的账号验证,还是请求记密码登陆的token验证),就开始正常登陆,并获取角色相关数据以及其他数据。
3)登陆后请求Token 。正常登陆服务器后,客户端可以请求token,并把token加密保存到本地文件,以便以后的请求记密码登陆。
4)请求记密码登陆(imid+token登陆,imid是指角色id)。使用之前记录的token和角色id来快速验证登陆。
涉及的服务器类型如下:
FLServer :前端服务器。负责接入客户端,处理登陆请求。
HLServer:平台账号服务器。管理账号的生成以及查询。
NameServer:命名服务器。负责根据账号生成以及检查用户ID。
FLSuperServer:前端管理服务器。负责分配合适的网关。
GatewayServer:网关服务器。负责客户端正常登陆后的消息转发。
TokenServer:Token服务器。负责生成客户端登陆的Token并存档。
TokenVerifyServer:Token前端服务器。负责接入客户端并转发请求到TokenServer(如果有拓展其他类型的TokenServer,会根据类型选择转发)。
SessionServer:会话服务器。缓存了角色基本信息和状态。
返回需要登陆的网关给客户端。之后可以开始正常登陆
1)发送用户请求登陆到FLServer
2)转发请求到HLServer,查账号表,检查账号和密码合法性
3)转发请求到NameServer,根据账号检查对应的用户ID(登陆过的),或者分配一个对应玩家ID并存档(没有登录过的)
4)转发请求到FLSuperServer,由网络类型以及各个网关负载,选择合适网关
5)转发请求到GatewayServer,记录用户ID(IMID)到网关登录会话,记录登陆会话到登录会话管理器(为了登陆网关验证)。返回网关socket加密秘钥(des)、端口和ip给客户端。
(1)登陆网关
1)发送登陆请求到GatewayServer
2)GatewayServer注册用户,初始化网关连接,返回用户断线重连随机数、请求心跳
3)转发登录请求到其他服务器(2)登陆SessionServer
1)请求角色基础信息
2)请求好友分组信息
3)请求用户Vip状态
4)请求公会任务
5)获取用户关系信息
在正常登陆到网关服务器之后,请求token ,并存于客户端本地并加密,以便于以后的记密码快速登陆
1)发送请求到TokenServer,根据imid获取token,没有则生成。(从内存读取token,或从memcache或mysql读取)imid+token登陆.返回需要登陆的网关给客户端。之后可以开始正常登陆
1)发送请求到TokenVerifyServer,如果token类型是IM类型的就发送到TokenServer(否则到GameTokenServer ,是其他类型账号的登陆)
2)转发请求到TokenServer,验证imid和token的合法性
3)转发到FlSuperServer,选择合适的网关
4)转发到GatewayServer,记录登陆会话,加上网关的IP和端口
5)返回信息到客户端(经过TokenServer和TokenVerifyServer)
消息流程如下图: