各业务进程(gateway、lobby、scene、record 等)通过 Nexus 做服务注册与发现:连上 Nexus 后上报身份,Nexus 按配置把「本进程关心的其它服务」列表推回,并在服务上下线、信息变更时通知订阅方,从而 替代独立部署的 ZooKeeper。(仓库中旧的 ZooKeeper 客户端实现已默认不参与编译,配置里的 zookeeper 字段多为历史遗留命名。)
* 同步风格编程模式
* 性能与异步编程相当
* 代码风格接近同步编写
* 线程和协程结合
* 传统游戏服为提高性能多采用异步非阻塞,但逻辑易碎片化、难维护;框架用协程在保持相近性能的前提下,让代码可按同步思路组织
* 线程数量固定(在初始化时配置各模块线程池规模)
* 协程从属于线程,同一线程内协程共享公共资源时可避免加锁
* 无锁实现(高性能)
* 不依赖系统互斥锁(配合无锁队列等)
* 服务器连接自动建立和维持
* 经 **Nexus** 完成注册、发现与拓扑通知,各服长连维持
* 服务器之间以 RPC 通信(自动协程挂起/唤醒,不阻塞线程)
* 可通过 Protobuf option 定义 RPC 行为
* 带返回值的 RPC 会触发协程切换
* 不带返回值的 RPC 可不产生协程切换
* 可指定在服务端新协程中处理 RPC
* 服务器与客户端之间的网络
* 数据采用 Protobuf 定义
* 注册消息处理
* 提供 Unity 客户端网络接口
* 支持断线重连与消息重发
* 改善弱网体验
* 安全性
* 防消息重放
* 防篡改:加密、CRC 等
* 消息可带 user tag(客户端发请求时在头中携带 tag,服务端应答带回相同 tag,便于匹配异步应答)
* 负载均衡(进程可水平扩展,玩家对象可分散到多实例)
* 登录、顶号、离线、断线重连(实现少量委派接口即可,如身份校验)
* 防重复实体
* 分布式实体心跳
* 场景切换
* 提供切换接口,角色可跨场景而不必关心具体落在哪台 scene 进程
* 数据持久化
* MySQL:落地库
* Redis:缓存
* 定时脏写与缓存落盘
* 通过配置描述角色数据,并可由工具生成结构与访问代码(格式已定义,工具可迭代)
* 代码热更新
* 支持 Lua(多用于线上热修)
* 故障处理
* 消息屏蔽(紧急关闭指定消息)
* Lua 绑定消息处理(框架可优先走 Lua)
* 分区分服与合服(区服为逻辑划分)
* 支持大区、分区、滚服、合服
* 不同区服可共用同一组物理机器,仅逻辑隔离
* 支持 TCP 与 UDP 消息服务
* 网络消息 Protobuf 编解码
* 消息合并发送(减少小包、提高吞吐)
* 内置 Web Server,便于支付、GM 等;登录接口亦可基于 Web
* 定时器(协程与 timer 等用法)