SuperAPI AI 工具集

borrowed-wire-protocol-discipline

编程与开发

查看项目

更新于 10-17 16:16

技能介绍

用途

本技能面向“实现别人定义的协议”这一场景,核心主张是:你未编写的协议不属于你可以改进的对象。与对端实现互操作会颠覆通常的直觉——名称不够描述性、编号有空洞、一半消息你没有对应 UI,但每一项都是承重的。重命名字段或重排编号不是重构,而是让客户端连接成功却静默无法加入任何会话。

主要能力

技能把纪律写成可执行的规则与检查手段:

  • 在 schema 所在处写明事实来源:用注释声明“Source of truth: <你正在实现的 schema>”,并强调此处任何内容不得被“改进”。
  • 处理 schema 未声明的常量:schema 描述消息形状,但常常不给出承载它们的信封类型字符串、排序要求或大小阈值。这些只存在于对端源码中,必须在那里读取,并在注释中引用所读文件与符号。猜测的类型字符串会得到“unknown message type”错误,socket 保持打开、帧继续流动、握手却永不完成,看起来像网络问题但并非网络问题。
  • 未识别消息类型解码为 null 而非抛异常:对端会先于你发布新类型。在未知帧上崩溃的客户端无法与更新的对端共享会话,故障表现为“直到有人更新前都正常”。dispatch 的 else 分支返回 null,上层转发类型与 null 载荷,一切不中断。
  • 解析你没有对应功能的消息类型:没有该 UI 的客户端中的文本消息帧仍须穿过编解码器而不扰乱流,因为运行更完整实现的对端会发送它。“我们不支持该功能”是 UI 决策,不是拒绝字节的许可。
  • 协商能力只能收窄,不能放宽:握手说对端不能做某事时,本地关闭它;说对端能做时,这不是开启的指令——你自己的阈值和理由仍然适用,凭对端声明开启的能力你没有回退方案。示例代码展示单向分支、无 else:当 !peerCaps.supportsCompression 时记录日志并设置 compressionEnabled = false。
  • 区分“关于本条消息”与“关于本连接”的错误:二者在同一通道到达且外观相同。限流或载荷格式错误只涉及一帧;当作连接失败会拆掉正常会话,若喂给重试策略还会在单次坏发送上烧掉整个预算。客户端本身被拒(不支持的版本、被拒的凭据)则相反:重试会永远重复。应维护一个明确的不可恢复代码集合,其余默认可恢复,因为对端会添加你从未见过的代码。
  • 不把每个对端错误都暴露给用户:用户无法处理的错误(后台消息的限流)会变成毫无意义的惊悚横幅。在状态机处过滤,其余记录日志。
  • 用测试固定字段编号与类型字符串:断言每个握手类型的字面字符串、断言信封的原始 tag 字节,可把整类“有人整理了 schema”变成构建失败。没有这些测试,第一个症状是用户说连不上,而引发它的改动在 diff 里看起来无害。
  • 从首次提交起把借用类型隔离在模块边界后:它们是普通类,会像普通类一样扩散;一旦某个界面 import 了其中一个,“此处任何内容不得改进”的规则就必须在一个没人读到它的文件里也成立。

使用方式

技能给出三条 grep 命令用于验证纪律:

  1. 按声明的小写 wire 字面量数量对文件排序,协议常量对象应在列表中遥遥领先;第二个含少量此类常量的文件要么是无关的偏好键集合,要么是重复词汇表的开端。
  2. 查找内联比较而非按名称引用的 wire 字符串。预期命中很少,且每一条都要读——实践中消息类型有常量,而错误码在响应它们的文件里仍是内联字面量,这正是发送侧与接收侧之间会漂移的那部分。
  3. 查找协商分支,它会与树中所有无关的能力谓词混在一起(HTTP 客户端的 range 支持、加载器的 mime 类型覆盖、查询参数),因为该模式是普通英语而非协议词汇。只读握手附近的命中:每个都应是 schema 字段或收窄分支,因对端支持而启用某物的握手分支就是放宽错误。

最后通读 schema 文件一遍,检查每个未出现在已发布 schema 中的常量都带有注明其读取来源的注释。没有出处的常量就是猜测,而此文件中的猜测正是表现为“连接打开却什么都不做”的故障。

适用场景

适用于需要与第三方或对端实现互操作的协议实现工作,尤其是消息类型、字段编号、常量字符串构成契约的场合。

限制

资料未提供该技能的具体安装方式、支持平台、收费情况或效果保证。