唯一服,主要功能如下
登录账号验证
agaent负载均衡
玩家匹配
房间管理
main.go
主要功能如下:
启动etcd连接
启动grpc服务
连接数据库
启动web服务器
agents.go
主要功能是维护当前的网关服列表
通过etcd添加or删除网关
负载均衡获取网关
game.go
处理游戏房间的问题,房间都是在unique存储的,房间开完准备好,通知到一个game服,后面客户端就是直接往game进行游戏
图中黑色的线表示的是客户端的Session,红色的是服务端的Session
整个游戏开房间的完整步骤如下
创建房间消息,发UpCreatGameRoomToUnique收CreateGameRoomToClient,消息流向:客户端→网关→唯一服(处理服)→客户端
加入房间消息,发UpJoinRoomToUnique收DownJoinRoomToClient,消息流向:客户端→网关→唯一服(处理服)→客户端
游戏准备消息,发UpGameReadToUnique收DownGameReadyToClient,消息流向:客户端→网关→唯一服(处理服)→客户端
通知游戏服创建房间,目的是随机挑一个游戏服来进行游戏,最终唯一服拿到一个游戏服ID,发UniqueCreateRoomToGame收GameCreateRoomToUnique 消息流向:唯一服→游戏服→唯一服
拿到游戏服ID后,通知网关服,发CreatRoomSucceedToAgent 消息流向:唯一服→网关
网关服拿到游戏服ID,建立到游戏服的连接,发JoinRoomToGame收NoticeGameStart,消息流向:网关→游戏服→网关→客户端
离开房间时,game服会关闭从agent服来的Session
loginHandler.go
处理登录相关的一系列流程
上图是登录的流程:
客户端从unique的web接口请求网关服信息,如果已经连接则会踢人
客户端拿到网关服信息后发起长连接
连接成功后发起登录消息到网关服
网关服去unique验证登录信息
unique给网关服返回登录有效信息
网关服给客户端下发登录成功信息
register.go