title: "game server"
date: 2024-11-04T11:06:50+07:00
draft: true
设计稿
gate -- logic1
-- logic2
manger
服务器采用如图架构,gate 负责接入, logic 服务器负责具体逻辑处理,比如“三国杀”牌桌服务。综合类业务逻辑由大厅处理,大厅也归属于 logic 的一种。manager 通过 gate, logic 的 HTTP 端口对其进行管理。
gate 和 logic 是 m:n 的对应关系。针对某用户(简称user),只能在某一个 gate 登录,同一时间只能“存在“某一个 logic server, 但可能同时能和大厅交互。
- logic 启动后注册自身到 etcd,gate 读取各个 logic 注册信息并连接 logic, 并监听logic注册信息变更,从而可能执行“断开连接”,“停止新增用户”,“防止重复登录”等操作。
- user 位置由 redis 保存,能快速查找user 位置,能统计各个服务器用户数,断线重连等等。
- 消息id 使用 int64 类型,而不使用类似于 HTTP 的字符串路径路由。因为消息体会有比较大的 overhead, 而且 gate 需要保存路由表,甚至需要把路由表发送给客户端。而且往往,需要使用 reflect 技术处理消息。这一切都不必要,而且性能较低。
- gate 到每个 logic 的 RPC 都使用单条 socket 连接进行双向通信。对于 gate 来说,每个 socket 客户端代表一个 user。对于 logic 来说,每个 RPC 连接都包含一批 user, 当一个 user 对应两条 RPC 客户端 session, 就代表有问题了。
- 重复登录。当同一个user 重复登录到不同的 gate, 可以通过 redis 判断,找到user 所在的 logic 通过其 HTTP 管理端口执行踢人命令。