channeld 以频道(Channel)为核心模型,原生支持空间分片、跨服 Handover、 AOI 状态同步与内置聊天。服务无状态协作、故障自愈,横向扩容只需加机器。
全局由 root 注册中心统一监控;公共服(认证 / 入口)与游戏分区服(网关 / 玩家中心 / 空间中心 / 空间负载 / 聊天)完全解耦。 新增一个游戏分区,只需复制一组分区服务——公共服零改动。
空间、同步、聊天、安全、可观测——这些多人游戏的硬骨头,channeld 在框架层全部内置。
世界在 XZ 平面按 GridCols × GridRows 划分,每个网格对应一个空间频道;服务器再按 ServerCols × ServerRows 分片承载,网格与服务器规模独立伸缩。
实体跨网格移动时自动转移实体频道所有权、迁移空间数据并以边界镜像衔接,客户端无切换、无黑屏、无闪烁。
四种区域查询类型按需订阅;fan-out 间隔与延迟、字段掩码、跳过自身回推等订阅选项精细控制带宽。
TCP / WebSocket / KCP 三种传输统一内部消息格式,一条代码路径多端接入;Snappy 逐包压缩,WebSocket 网页客户端同样可用。
AuthProvider 可插拔认证;认证失败计数 + IP / PIT 黑名单的 DDoS 防护;频道四级 ACL 控制订阅与数据访问权限。
服务端连接异常断开自动保留恢复句柄,重连后复用连接 ID、恢复所有者与订阅状态,频道数据补发不丢。
世界 / 区域 / FOV(视野半径)三种频道;跨分片场景下由网关按全局位置统一投递,站在分片边界也能和邻区玩家对话。
Prometheus 指标按连接 / 频道 / 消息 / 数据包分组统计;pprof 内置性能分析;root 提供 Web 控制台实时查看节点树、FPS 与连接数。
自定义合并接口替代反射合并,512 条更新缓冲、扇出间隔节流,脏数据按订阅选项精准推送。
Go 原生并发 + 无锁数据结构,热路径上没有全局锁。
消息队列与扇出队列由频道自己的协程驱动,单频道慢不影响其它频道。
连接与频道的全局索引使用分段无锁 Map,读写不互相阻塞。
更新先合并进缓冲区,按 FanOutInterval 批量推送,带宽随频率可调而非随消息数线性增长。
高频小消息在网络层压缩后传输,单包上限 64KB,压缩类型逐包协商。
收发解耦,慢客户端不拖累服务器写循环,FSM 状态机挡掉非法消息序列。
// 三类频道,覆盖全局 / 空间 / 实体粒度 GLOBAL // ID 0 · 主服务器拥有,管理所有频道 SPATIAL // ID ≥ 0x00010000 · 一个网格一个频道 ENTITY // ID ≥ 0x00080000 · 一个实体一个频道 // 数据包格式(4B 魔数 + 4B 长度 + 1B 压缩位) "CHNL" | size(BE) | ct | payload // 扇出选项:精准控制谁在何时收到什么 FanOutIntervalMs // 推送频率节流 FanOutDelayMs // 首次扇出延迟 SkipSelfUpdateFanOut DataFieldMasks // 字段级过滤
频道状态机:INIT → OPEN → HANDOVER,所有权可在服务器间转移。
所有服务只依赖 root 注册中心,掉线自动重连、systemd 守护自愈; 空间分片从 2×2 起步,网格和服务器维度均可独立扩展。
AuthProvider // 注入 OAuth / JWT 等自定义认证 SpatialController // 自定义空间分区策略 MergeableChannelData // 替代反射的合并逻辑 ChannelDataExtension // 泛型频道数据扩展 ChannelDataInitializer // 频道数据默认值 HandoverDataMerger // 实体→空间数据合并
接口注入而非继承——业务代码不侵入框架内核,升级互不干扰。
游戏分区组(gtlb / splb / sctr / pctr / chat)作为整体复制即可开新区,公共服零改动。
ServerCols × ServerRows 决定分片数,GridCols × GridRows 决定世界粒度,两者互不耦合。
服务断连每 4 秒重试,gtlb 通过 root 的 service_list 动态发现后端;先起网关后起后端也没问题。
unit 文件已编码依赖顺序(After / Requires),Restart=always 秒级拉起,标准 Linux 运维栈直接托管。
一个 APK 体验 channeld 全部核心能力——从认证到跨分片聊天,全程真实服务器、真实网络。
auth用户名密码认证,取得 PIT 令牌与入口地址。
gent区服列表由服务端健康度动态生成,直连最优网关。
gtlb → pctr种族 / 性别 / 体型 / 职业,角色数据持久化到 MySQL。
splb 分片多人位置实时同步,走到分片边界无缝切换、镜像玩家平滑过渡。
chat世界 / 区域 / 视野三频道;隔着分片边界,100 米内照聊不误。