CivGenesis
文档
Quickstart
设计
协议
SDK
Protobuf
观测
Jobs
IPC
Nacos
gRPC
Dispatcher
集成
GitHub
文档
Quickstart
设计
协议
SDK
Protobuf
观测
Jobs
IPC
Nacos
gRPC
Dispatcher
集成
GitHub
  • 指南

    • Quickstart(示例工程)
    • CivGenesis 设计(草案)
    • 协议与会话(草案)
    • Protobuf:消息定义与生成(Java / Unity / TypeScript)
    • 可观测性:Prometheus Metrics + OpenTelemetry Tracing
    • 后台任务(本地 / 分布式)
    • 客户端 SDK(Unity / Cocos / LayaAir)
    • Dispatcher 与注解路由(草案)
    • 进程间通信(IPC)与服务发现(草案)
    • Nacos 注册中心(默认实现)
    • gRPC(与 Node.js 战斗进程互通)
    • 时间轮定时系统(草案)
    • 配置项建议(草案)
    • 安全基线(草案)
    • 系统消息(protobuf)草案
    • 集成指南(不含业务逻辑)
    • 热更新(兼容 Arthas redefine)草案

时间轮定时系统(草案)

目标:用时间轮实现高效定时,同时保持“少锁化”的分片线程模型。

核心原则

时间轮线程只负责“到期触发”;业务回调必须回投到 ShardExecutor 执行。

否则会出现:

  • 定时回调跨线程改玩家/房间状态 -> 加锁/竞态/死锁风险
  • 定时与消息处理乱序 -> 状态不一致

API 建议

  • schedule(shardKey, delay, task)
  • scheduleAt(shardKey, deadlineMonoNanos, task)(推荐:用单调时钟)
  • cancel(handle)

其中 shardKey 默认:

  • 已登录:playerId
  • 未登录:channelId

Tick(房间/战斗/行军)最佳实践

不建议“全局固定频率扫所有对象”,更推荐“对象自调度”:

  • 每个房间/行军/建筑实例维护 nextDeadline
  • 到期后执行一次逻辑,并计算下一次 nextDeadline 再 schedule

收益:

  • 空闲对象不占 tick 成本
  • 大规模对象时更平滑(不会在同一帧集中爆发)

时间基准

内部 deadline 建议使用 System.nanoTime()(单调不回拨)。

Edit this page
最近更新: 2025/12/31 16:07
Contributors: cuihairu
Prev
gRPC(与 Node.js 战斗进程互通)
Next
配置项建议(草案)