协议与传输
本节定义跨语言一致的协议结构与传输边界。
Transport 接口(逻辑)
- 发送:
send(message) - 接收:
poll(max) -> [message] - 关闭:
close()
消息最小字段
epoch:逻辑时间片channelId:通道标识sourceId:来源标识(Actor/节点)sourceSeq:来源内单调递增序号schemaId:消息结构版本qos:优先级(0-255,越大越优先)payload:业务数据
ActorId 约定(默认规则)
sourceId默认等于actorIdactorId为 64-bit 数值,可按规则解析- 默认布局(高位到低位):
region(10) | server(12) | processType(6) | processIndex(10) | actorIndex(26)
- 解析规则可替换:实现
ActorIdCodec(encode/decode/name)即可切换 - Node.js 需要用
BigInt保存完整 64-bit
传输实现原则
- 各语言独立实现 Transport,不依赖 C/C++ 绑定
- 可复用 Aeron 或自研 UDP 传输
- 必须保证可重放与一致性验证
Aeron 集成
- 设计说明见:
docs/guide/transport-aeron.md
QoS 分级建议
240-255: 系统/运维命令(如诊断、状态查询)128-239: 关键控制类消息1-127: 普通业务消息0: 默认
测试向量
- 必须提供“输入明细 + 期望 stateHash”的测试向量
- 所有语言实现都需复用该向量
- 基准文件:
test-vectors/epoch_vector_v1.txtM,epoch,channelId,sourceId,sourceSeq,schemaId,payload(qos 缺省为 0)M,epoch,channelId,sourceId,sourceSeq,schemaId,qos,payloadE,epoch,state,hash