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