@ earendil- works/ pi- protocol
运行时中和路由信封,CBOR编码,以及实验Pi协议的字节流框架.
协议版本 8 定义 :
- 用于识别逻辑的版本握手
serverId· ; - 明确的服务器和会话请求目标;
- 与不透明的严格JSON有效载荷有关的请求和反应;
- 要求取消、不透明的订阅更新和带外附件更改;
- 非空的不透明错误代码和有边框的运输信息.
服务器目标包含 { serverId }; 会话目标包含 { serverId, sessionId, attachmentId }。合并的路由栅栏呼叫一个逻辑服务器、持久会话和现场演示文稿附件。 管理层 attach() 财务报告和审定财务报表 detach() 返回无路由标识符; 服务器以带外方式发布选定的活路 attachment 留言。 断开连接只发布演示文稿的附加内容在被允许通话后结算.
弦拥有这些信封内载的有效载荷语义: { serviceId, instance?, member, args } 电话 $chord.service 控制词汇,服务目录,订阅快照和更新,服务出错代码,以及复制状态的独立Delta路径编码. pi-protocol 验证每个不透明有效载荷都是严格的JSON,但不验证或导出其弦法. 客户端和服务器通过 @earendil-works/chord 在服务适配器边界.
会话-指令状态,管理结果,笔录,模型,插件,以及所有其他应用值仍然不透明服务数据. 持久会议及其召开方式仍然是会议工人进程的地方。 服务器和会话不透明地将路由调用到他们自己的提供者,在那里Cord和应用程序验证并引用它们.
服务器和工人的生命周期被故意置于这一公开协议之外。 实验性本地协调器只是不透明的消息路由器;每个可替换的服务器进程都拥有私有的生命周期协议.
每个线框由四字节无标记的大尾有效载荷长度所组成,再取一个确定长的CBOR项目. encodeClientMessage() 财务报告和审定财务报表 encodeServerMessage() 验证和编码完整的框架. ClientMessageDecoder 财务报告和审定财务报表 ServerMessageDecoder 接受任意的溪流分解和汇合.
import {
PROTOCOL_VERSION,
encodeClientMessage,
ServerMessageDecoder,
type ClientHello,
} from "@earendil-works/pi-protocol";
const hello: ClientHello = { type: "hello", version: PROTOCOL_VERSION };
transport.send(encodeClientMessage(hello));
const decoder = new ServerMessageDecoder({ maxFrameLength: 1024 * 1024 });
for (const message of decoder.push(incomingChunk)) handleServerMessage(message);
decoder.end();
所有信封计划都拒绝未知物体属性,编码器递归拒绝非JSON不透明有效载荷,包括非无限数,字节数组, undefined原型和循环 信封违反、 CBOR 格式错误和设定无效 ProtocolValidationError. 有效载荷特定适配器必须在解码后进行自己的语义验证. 运输必须保持字节顺序。 实验运输没有实施同行认证和认证服务环境.
默认限值为每CBOR有效载荷/帧16个米B,1,000,000个阵列元素或映射条目,以及64个嵌入物等. 协议是实验性的,没有兼容性保证.