HeTu 文档
HeTu 文档
HeTu (河图) 是一个高性能、多进程、分布式的游戏服务器引擎。它采用 实体-组件-系统 (ECS) 模式,将状态存储在 Redis 中,并通过 WebSocket 以可订阅、行级权限的数据库形式向游戏客户端暴露这些状态。
graph TD
;
subgraph "HeTu"
DB1["消息队列"];
DB2["逻辑(系统)"];
end
Client["游戏客户端"] <-- 订阅流 --> DB1;
Client -- RPC --> DB2;
subgraph "数据库"
DB1 <-- 只读订阅 --> Replica;
DB2 -- 读写事务 --> Master;
end
为什么选择 HeTu?
- 两层开发模型。 直接使用类型化的组件编写游戏逻辑——无需单独的数据库层、ORM 或事务处理。
- 有状态的长连接。 与专注于无状态 CRUD 的后端即服务产品不同,HeTu 专为内存中的游戏状态而构建,支持毫秒级的推送更新。
- Redis 吞吐量。 写入吞吐量大约是典型基于 Postgres 的 BaaS 堆栈的 10 倍;请参阅项目 README 中的基准测试。
- 响应式 Unity 客户端。 C# SDK 提供订阅对象,无需轮询即可驱动 UI 更新。
一个 30 秒的示例
服务器端 (Python):
import hetu
import numpy as np
@hetu.define_component(namespace="Chat", permission=hetu.Permission.EVERYBODY)
class ChatMessage(hetu.BaseComponent):
owner: np.int64 = hetu.property_field(0, index=True)
text: str = hetu.property_field("", dtype="U256")
@hetu.define_system(
namespace="Chat", components=(ChatMessage,), permission=hetu.Permission.USER,
retry=99
)
async def user_chat(ctx: hetu.SystemContext, text: str):
row = ChatMessage.new_row()
row.owner = ctx.caller
row.text = text
await ctx.repo[ChatMessage].insert(row)客户端 (Unity / C#):
await HeTuClient.Instance.CallSystem("user_chat", "Hello world");
var sub = await HeTuClient.Instance.Range<ChatMessage>("id", 0, long.MaxValue, 1024);
sub.AddTo(gameObject);
sub.ObserveAdd().Subscribe(msg => Render(msg));这就是完整的交互:一个类型化的表、一个 RPC 入口点和一个响应式订阅。无需模式迁移、API 网关或消息代理。
核心概念:事务
保证
- HeTu 保证客户端对
System的调用按客户端发出的顺序执行;来自同一客户端的每次调用都在同一个协程内运行。- 换句话说,每个玩家自己的逻辑是单线程运行的,并且客户端的调用顺序永远不会被打乱。
async/await不会破坏此保证——当await挂起时,控制权只能切换到属于其他连接的协程。- 这也保证了
System调用永远不会被丢弃(除非重试预算耗尽或服务器崩溃)。
事务冲突与重试
System内部的写入可能会发生事务冲突;设置retry > 0会自动重新运行该System。- 事务使用乐观版本锁定,并在
System函数返回时提交。 - 任何已被读取或即将被写入的行,如果被其他进程/协程在底层更改,则会引发冲突。
- 例外:
range()查询不会锁定索引,因此其他 System 在查询范围内添加、删除或重新排序行时不会引发冲突。请使用unique约束代替索引检查。
- 例外:
- 任何外部或持久化的副作用——更新
ctx全局变量、写入文件、发送网络调用——必须在事务提交之后发生。否则,当事务被丢弃时,这些副作用可能已经生效。使用显式的ctx.session_commit()提前提交;如果发生冲突,它会引发异常,因此其下方的任何代码都不会执行。 - 使用
ctx.race_count来了解当前运行是第几次重试尝试。
- 事务使用乐观版本锁定,并在
- 如何减少事务冲突
System运行越慢,其冲突概率越高。如果需要在System内部进行大量计算,请考虑使用Endpoint以获得更精细的控制。- 关注慢日志;只有在冲突堆积时才深入排查。
下一步
- 入门指南 — 安装 HeTu 并在 10 分钟内运行你的第一个服务器。
- 教程:聊天室 — 端到端构建上述示例。
- 概念 — ECS 模型、订阅、权限以及你获得的事务保证。
- 高级功能 — System 副本、定时未来调用、原始 Endpoint、生命周期钩子和自定义管道层。
- 运维 — 生产部署、Redis 拓扑和负载均衡。
- API 参考 — 从源码文档中自动生成。
状态
HeTu 目前处于内测阶段