前言¶
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