全部目录
这是详细目录页,不是主入口。主入口是 源码学习首页;这里用于按 Part 浏览全书结构与阅读路线。
推荐阅读顺序
- 先读 Part I,建立问题背景和系统地图。
- 再读 Part II,搞清组件怎样启动、实体定义怎样变成运行对象。
- 接着读 Part III,理解基础设施层(并发、网络、分布式)。
- 然后按 Part IV 的顺序读核心机制:序列化 → RPC → 广播 → 持久化。
- 再读 Part V,看 AOI、空间、运动、Ghost 这些空间层高级机制。
- 然后读 Part VI,理解脚本层行为。
- 接着读 Part VII,从前后端交互角度理解客户端视角。
- 最后用 Part VIII 把运维调试掌握,再用 Part IX 串联实战。
Part I — 为什么长这样
Ch1 导读与阅读方法
- 这本书的组织方式
- 每章统一结构:核心问题 → BigWorld 背景 → KBEngine 实现 → 关键源码入口 → 关键调用链 → 小结
- 建议的阅读方式(通读 → IDE 跟读 → 专题深挖)
- 源码引用地址
Ch2 BigWorld:问题、模型与核心概念
- 大规模多人在线场景的技术约束
- Login / Base / Cell / DB 分工是如何被需求推出来的
- Entity / Proxy / Base / Cell / Space / Witness / Ghost 各是什么
- BigWorld 模型是"被问题塑造出来的"
Ch3 KBEngine 系统全景
- 项目定位与对 BigWorld 的取舍
- 五类进程的职责边界(接入 / 逻辑 / 空间 / 持久化 / 管理)
- 四条系统边界(接入边界 / 逻辑边界 / 持久化边界 / 管理边界)
Part II — 运行骨架
Ch4 启动流程与进程模型
main → kbeMainT → ServerApp → EntityApp → 组件特化 → 集群注册 → InitProgress- 公共骨架 vs 实体骨架 vs 组件特化 vs 集群注册的四层分层
- 主循环:
EventDispatcher::processUntilBreak
Ch5 EntityDef 与实体定义系统
.def不是配置,而是运行时骨架(脚本描述 + 网络协议描述 + 持久化描述 三合一)- 属性的四层身份:Python 名 / 所属侧 / 协议字段 ID / 是否持久化
EntityApp::createEntity:定义世界 → 运行世界
Ch6 Python 运行时与脚本桥接
- 为什么游戏服务器选 Python 做业务语言
- C++ 与 Python 的桥接
- 如何把 C++ 方法导出成
KBEngine.xxx() - 热重载机制
- BigWorld Twisted Deferred vs KBEngine CallbackMgr
Part III — 基础设施层
Ch7 并发模型、线程与内存基础设施
- 主线程单线程运行游戏逻辑,工作线程只做 I/O 密集型任务
- 对象池:MemoryStream / Packet 的分配频率
- 内存分配器:kbemalloc / ned_allocator
Ch8 网络基础设施:I/O 模型与进程间通信
- I/O 事件模型:select / poll / epoll / kqueue / IOCP / io_uring
- Reactor 模式与 Channel / Endpoint
- TCP vs UDP:KBEngine 内部 TCP,BigWorld 内部 UDP + 自建可靠性
Ch9 分布式基础:ID、发现、注册与一致性
- 分布式 ID 生成:componentID / entityID
- Machine 注册中心:UDP 广播 vs BigWorld bwmachined 洪流发现
- 一致性保证:real vs ghost 的权威模型
Part IV — 通信与协作
Ch10 序列化、Bundle 与网络消息
- 三层职责:MemoryStream / Bundle / MessageHandler
- 为什么用手工流编码而不是通用结构体序列化
- PacketReader:拆包与防御
Ch11 RPC、EntityCall 与通信模式
- BigWorld:Mailbox + TwoWay + PyDeferred
- KBEngine:EntityCall = 纯单向 + CallbackMgr
- 单向消息流下的工程化解法:CPS、Future/Promise、Actor ask、Reducer + Effects、Saga、CQRS
tell / ask / 读模型 / 数据归属重构的实战决策表- Base/Cell/Client 三侧的专用方法类
- 与 gRPC / Protobuf 的设计对比
Ch12 属性同步与数据包广播
- "tick 内收集,tick 末批量发"的心智模型
- Bundle payload 复用:一份 payload + N 份 header
- alias 机制与 detailLevel 分级
Ch13 数据库、DBMgr 与持久化
- Base → Cell → DBMgr 三段式写库
- KBEngine: MySQL + Redis 双后端
- BigWorld: MySQL + XML + Primary/Secondary + 属性级映射
- EntityLog 在线检出与恢复
Part V — 空间、运动与拓扑
Ch14 Space、AOI 与视野系统
- 十字链表空间索引的插入/删除/查询
- RangeTrigger 进入/离开检测
- Hysteresis 防抖与 Witness 状态机
Ch15 空间拓扑与动态扩容
- BigWorld BSP 树动态拓扑
- grow/shrink Cell 边界移动
- KBEngine 简化空间管理
Ch16 移动、寻路与导航
- NavMesh + A* 变体寻路
- 移动控制器架构
- 寻路与 AOI 的关系
Ch17 Ghost 系统
- real / ghost 区分与 GhostManager
- RealEntityMethod:ghost 转接到 real
- controlledBy 控制权分布
Part VI — 脚本层行为
Ch18 钩子、回调、定时器与事件
- 生命周期钩子 / 定时器回调 / 异步结果回调 / 事件注册
- CallbackMgr 与 ScriptTimers
Part VII — 前后端交互
Ch19 客户端协议与前后端交互
- 客户端实体生命周期
- 属性同步的客户端侧插值与平滑
- 断线重连与 Exposed 方法信任边界
Part VIII — 运维、调试与稳定性
Ch20 可观测性:监控、性能分析与调试
- Watcher / Profiler / NetworkStats
- BigWorld ForwardingWatcher 分布式查询
- 分布式链路追踪缺失与 OTel 接入可能
Ch21 热更新、容错与运维工具
- 脚本热重载的边界
- BigWorld Reviver + Backup + Archive 三级容错
- Bots 压测与安全机制
Part IX — 串联与实战
Ch22 玩家完整生命周期
- 七阶段主流程:Login → DB → BaseAppMgr → BaseApp → Cell → Witness
- 会话主线 / 世界主线 / 数据主线
Ch23 BigWorld 与 KBEngine 对照
- 十维度全景对照表
- 进程模型 / RPC 模式 / 空间拓扑 / 持久化 / 容错 / 网络层 / 脚本层
Ch24 实战源码走读
- 五条函数级走读链路
- 推荐的实际阅读顺序
Appendix
A 源码阅读地图与推荐路径
- 五条专题阅读路径
B 关键算法速查
- 十字链表 / RangeTrigger / Hysteresis / BSP / NavMesh+A* / Rendezvous Hash / alias / 世代号复用
C 外部参考系统速查
- gRPC / nng / Aeron / Twisted Deferred 与游戏服务器的对比
D 专业术语速查
- 实体、通信、分布式、持久化核心术语的一句话定义
- Mailbox / EntityCall、TwoWay / Deferred、CID 等高频易混概念速查
E 引擎适用场景与游戏类型选型指南
- 四类游戏类型的引擎匹配分析(房间制 / MOBA / 中型 MMO / 大型 MMO)
- 决策流程:从项目特征到引擎选择
- 常见误区澄清与替代方案推荐
- 与 Ch23 选型建议的交叉参考
F 坐标系约定:BigWorld 与 KBEngine
- 轴约定(Y-up、XZ 地平面)、Y 轴开关的设计取舍
- 旋转表示:Direction3D(Euler 角弧度制)与角度压缩(angle2int8)
- 坐标压缩:PackXZ/PackY/PackXYZ 的范围、精度与带宽节省
- 同步协议中的坐标传输(更新标志位组合)
- 客户端接入的坐标变换(Unity/Unreal/Godot)
- 数学库选择(D3DX vs G3D)
G 服务器时间管理与世界时钟
- 物理时间、逻辑 tick、集群世界时钟三层模型
- KBEngine 的
timestamp() / EventDispatcher / g_kbetime / ScriptTimers - BigWorld 的
advanceTime / ScriptTimeQueue / TimeKeeper / gameTime持久化 - 为什么 MMO 不能直接用 wall clock 驱动世界逻辑
- 如果自己设计一套世界时钟,应该怎样分层实现
