前言¶
DSH 的设计理念是「一切皆插件」。在开发过程中,主机与客户端之间的双向通信往往需要处理复杂的网络层和协议适配。下面介绍 memorax-ai/the-binding-of-dsh,它通过集成原生 DSH Connection 和 Typert Gateway,解决了 Host 与 Client 之间双向服务调用的问题。
插件定位¶
这是一个 DSH 插件,用于在 Host 和 Client 之间建立双向 RPC。它由 memorax-ai 维护,主要解决以下问题:
* Host-to-Client 调用:支持针对连接的浏览器或 Node 对象进行定向调用。
* 双向通信:支持 Typert Gateway 的双向对称调用。
* 生命周期管理:处理请求关联、取消和连接生命周期。
核心功能¶
- Targeted Host-to-Client calls:支持针对连接的浏览器或 Node peers 进行调用。
- Symmetric Typert Gateway calls:支持 Typert Gateway 的双向调用。
- 连接与请求处理:提供请求关联、取消以及连接生命周期的处理机制。
- 多版本兼容策略:
- Legacy hosts:共享原生
events.hostWebSocket 用于 RPC 和事件。 - Modern hosts:使用 Binding sockets 进行双向 RPC,使用原生 Gateway streams 处理事件。
- Legacy hosts:共享原生
- 职责分离:Connection 对象负责 peer 寻址和生命周期;Typert Gateway 对象负责服务描述符、编解码器、调用和错误。
安装与启用¶
安装该插件需要满足以下环境要求:
* Node.js 22.22.3 或更新版本。
* Harmony 0.8.6 或更新版本(Harmony 会自动解析浏览器模块依赖并自动排序 Binding 模块)。
安装命令如下:
npm install the-binding-of-dsh
典型用法¶
插件提供了一系列 API 供 Host 和 Client 调用:
- 订阅事件:
peer.subscribe('api-session/status', (...args) => refreshSessionStatus(args))
- 处理事件:
peer.handleEvent('approval/request', async ({ agentId, request, signal }) => {
// 处理逻辑
})
- 建立连接:
await peer.connect()
- 流式传输:
stream(endpoint, payload, signal)
注意事项¶
- 连接状态:
connect()仅在 Gateway 准备好握手后才会解析。断开后,需再次调用connect(),或启用reconnectDelayMs进行自动重试。 - 事件重放:Binding 不会重放事件。连接恢复后,需要手动刷新应用状态并重新打开业务流。
- Agent 上下文:Handler 不会重建 Agent 上下文。
- 版本兼容问题:如果旧客户端仅请求 Legacy 事件,Modern hosts 会返回 HTTP 409。
- 代码验证:该插件遵循 MIT 许可证,安装前应检查源码与许可证。
总结¶
该插件为 DSH 开发提供了结构化的双向通信层,简化了 Host 与 Client 之间的交互逻辑。完整的源码与文档可在 GitHub 上获取。
参考资料¶
- GitHub: https://github.com/memorax-ai/the-binding-of-dsh
- 目录页: https://www.skillhub.cn/plugins/memorax-ai/the-binding-of-dsh