关键设计决策和原因
| # | 决策 | 原因 |
|---|---|---|
| 1 | 传输层抽象 | 多部署形态共用 Executor |
| 2 | EventTarget 而非 Node EventEmitter | 浏览器/同构友好 |
| 3 | REST 用 ProtoJSON | 与 proto 规范单一事实来源 |
| 4 | 非阻塞执行 | 长任务不占连接 |
| 5 | 任务状态校验 | 防止非法跳转破坏客户端 |
| 6 | 自动生成 contextId/taskId | 降低集成方负担 |
| 7 | 历史由框架管理 | 一致性、审计 |
| 8 | JSON-RPC 校验 response id | 防并发请求串响应 |
| 9 | SSE 自定义解析 | 兼容性与可控背压 |
| 10 | 传输名大小写不敏感 | 配置容错 |
| 11 | 分包入口(client/server/transport) | 树摇、依赖隔离 |
| 12 | 取消传播到 Executor | 真正停止副作用 |
| 13 | 推送异步发送 | 不拖慢主路径 |
| 14 | 拦截器 | 认证、日志、限流扩展 |
总结
SDK 优先 协议正确 + 传输可换 + 长任务可观测;读源码从 Transport 与 DefaultRequestHandler 两条线切入。