中文 / English
Infra Protocol 面向各类个人基础设施(Personal Infra),提供一组中立、统一登记且可独立演进 的协议。当前正式包含的第一个协议是 Infra Discovery:服务声明自己实现了哪些协议版本,以及 可以通过哪些 binding 访问;消费者从中选择自己确实理解的组合,然后直接连接服务。
Infra Discovery 不是 daemon、代理、RPC 框架或通用数据模型,也不定义抽象的“能力”。类似的 业务能力可能由完全不同且互不兼容的协议提供,因此机器只按具体协议 ID、精确版本和 binding 判断兼容性。
当前稳定版本为 infra.discovery.registration@20260810.1。
一个注册清单只包含:
- 稳定服务身份与每次启动都会变化的 generation;
- 有期限的 lease;
- 一组
(protocol, protocol versions, binding, endpoint)offer。
同一个 service.kind + service.instance_id 同时只能有一个发布者续租稳定 manifest;需要并行
发布的进程必须使用不同的 instance_id。
发现完成后,消费者与发布者直接通信。请求、响应、状态机、错误和数据安全边界全部属于被选中 的应用协议,不属于 discovery。
| 部署类型 | 根目录 |
|---|---|
| macOS 非沙箱 | <_CS_DARWIN_USER_TEMP_DIR>/infra-protocol |
| Linux | $XDG_RUNTIME_DIR/infra-protocol |
| Windows 非 packaged 桌面进程 | <FOLDERID_LocalAppData>\Infra Protocol\Runtime |
macOS 沙箱使用所有参与者共同拥有权限的
<App Group container>/infra-protocol,或者共同的绝对 INFRA_PROTOCOL_RUNTIME_DIR。
Windows packaged 进程以及其他默认目录被隔离的环境必须使用共同、可访问的绝对 override。
无法获得共同根时,discovery unavailable。
Unix Socket endpoint 使用最多 16 个安全 ASCII 字符的短 opaque ID。发布者和消费者都必须
按最终绝对路径的字节长度检查平台 sockaddr_un 上限;Schema 中的短名称限制不能替代这项
动态检查。
SPEC.md:canonical discovery 规范及两个本机 binding。schemas/:注册清单 JSON Schema。fixtures/:有效及无效注册样例。conformance/:Schema 之外的租约、选择和文件系统语义检查。MIGRATION.md:现有三方 observer 合同如何拆离 discovery。
observe.snapshot、events 和 control 当前均不由本版本定义。真正需要时,它们应作为独立
协议加入,而不是扩张 discovery。
测试使用 Python 和 Draft 2020-12 jsonschema:
python3 -m unittest discover -s tests -v许可证:MIT。