Apollo 技术文档Apollo 技术文档
指南
  • 架构概述
  • BigWorld 架构深度解析
  • BigWorld 进程架构与玩家生命周期
  • AOI九宫格系统详解
  • AOI广播与消息去重
  • Base 模块
  • Core 模块
  • Runtime 模块
  • Data 模块
  • Network 模块
  • /modules/actor.html
  • Game 模块
  • BigWorld 模块
服务器应用
API 参考
QA
GitHub
指南
  • 架构概述
  • BigWorld 架构深度解析
  • BigWorld 进程架构与玩家生命周期
  • AOI九宫格系统详解
  • AOI广播与消息去重
  • Base 模块
  • Core 模块
  • Runtime 模块
  • Data 模块
  • Network 模块
  • /modules/actor.html
  • Game 模块
  • BigWorld 模块
服务器应用
API 参考
QA
GitHub
  • MMORPG 架构 QA

Q32: KBEngine CellApp 同机/跨机如何通信?有什么证据?

核心结论

这类系统里,同机和跨机通信在逻辑语义上通常没有本质区别,区别主要在传输路径和成本:

  • 同机通信延迟更低,系统调用和网络栈路径可能更短
  • 跨机通信要承担真实网络开销和更复杂的故障条件

但无论同机还是跨机,CellApp 之间传递的核心内容仍然是:

  • 实体迁移
  • Ghost 同步
  • 边界协作

一、不要把“同机”和“跨机”理解成两套不同语义系统

对上层逻辑来说,目标通常都是:

  • 找到目标 CellApp
  • 发送内部消息
  • 在目标侧按协议处理

差别主要在于底层连接是否经过本机回环、IPC 或真实网络。

二、为什么同机和跨机都需要统一内部协议

因为只要逻辑语义不同,系统就会非常难维护:

  • 测试环境和生产环境行为不一致
  • 节点迁移后语义变化
  • 故障排查困难

更稳妥的做法通常是:

  • 统一消息定义
  • 统一路由语义
  • 只在底层传输实现上区分本地和远端优化

三、同机通信的特点

通常表现为:

  • 延迟更低
  • 带宽更充裕
  • 更适合高频内部消息

但它并不代表可以随意放大通信量。只要消息量过高,同机也会被序列化、队列、上下文切换和缓存失效拖慢。

四、跨机通信的特点

跨机链路需要额外考虑:

  • 网络抖动
  • 丢包和重传
  • 连接恢复
  • 故障隔离

这会直接影响实体迁移和邻区同步的设计。

五、真正重要的“证据”应该看什么

如果要判断这类系统是否支持同机和跨机统一通信,通常应该关注源码或实现里的几个核心点:

  • 是否有统一的 Channel 或连接抽象
  • 是否有统一的 EndPoint / 地址抽象
  • 是否通过 Poller / 事件循环驱动网络
  • 是否把节点间通信都包装成统一消息分发机制

这些证据比单纯看“有没有 TCP 连接”更有说明力。

六、从工程角度应如何评价

更准确的判断通常是:

  • 同机和跨机在逻辑层共用一套消息模型
  • 底层通过连接抽象屏蔽传输差异
  • 是否进一步做本地优化,取决于实现取舍

这比简单说“同机走共享内存、跨机走 TCP”要稳妥,因为很多系统实际并不会为同机单独做一整套专用语义。

七、常见误区

1. 同机通信就没有性能问题

不对。消息量、序列化、调度和队列堆积同样可能成为瓶颈。

2. 跨机通信只要网络快就没区别

不对。跨机场景的抖动、故障和恢复复杂度都更高。

3. 只要底层都是 TCP,就说明设计一样

不完整。更关键的是连接抽象、消息模型和路由机制是否统一。

参考资料

  • KBEngine 网络层常见 Channel / EndPoint / Poller 设计资料
在 GitHub 上编辑此页
最后更新: 3/20/26, 6:06 AM
贡献者: cuihairu