前言¶
DeepSeek Harness(DSH)的原生 Web 界面依赖 WebSocket 承载实时事件、逻辑流和断线恢复。企业网关或 HTTP 代理若明确禁用 WebSocket,常见表现是页面能打开、普通 API 也能访问,但连接一直失败或反复重连。换一套独立聊天前端可以绕开问题,却会丢掉 DSH 自带的会话、终端和插件生态。
下面介绍 dsh-websocket2http(显示名称:WebSocket 转 HTTP)。它在 DSH 的 Web 传输层把 Connection/Gateway 的 WebSocket 链路改为 HTTP 长轮询,仍使用原生界面与认证,属于社区插件目录中的 联网工具 类;维护者为 wlyzqm,源码在 GitHub,当前版本 0.1.2,许可证 MIT。目录页:https://www.skillhub.cn/plugins/wlyzqm/DSH-WebSocket2HTTP。
这是什么¶
dsh-websocket2http 是 DSH 的 Web 传输插件:浏览器在 Connection 启动前安装自定义的 __DSH_TRANSPORT__.openStream,服务端通过 ctx.typertGateway.wireStream.open() 分派原有逻辑流。启用后 固定走 HTTP 模式,不会先尝试 WebSocket。模型侧通信仍由对应模型插件决定;若模型插件自身使用 WebSocket,需要单独配置,本插件只接管 DSH 原生 Connection/Gateway 流。
package.json 中 engines.dsh 精确声明已验证 DSH 版本为 0.2.1-rc.2,Node.js 需 22 或更高。其他 DSH 版本需自行验证 Connection/Gateway 接口兼容性后再使用。
核心功能¶
工作方式可以概括为:普通 RPC、上传和静态资源仍走 DSH 原有 HTTP 接口;实时事件及逻辑流下行由 每个页面共用一个 HTTP 长轮询通道 承载;上行数据、半关闭及取消通过 有序 HTTP POST 完成;断线与服务重启沿用 DSH 原有的连接代次与基线恢复机制。
README 中写明的行为细节包括:单次轮询最长等待 20 秒并返回完整 JSON;下行保留到客户端确认并去重;常规队列目标约 2 MiB,空队列时允许单帧最大 32 MiB 快照;序号缺口会结束当前连接并由 DSH 重新获取基线;页面离开会尝试关闭连接,空闲会话约 65 秒后释放。新增 HTTP 接口先调用 ctx.connection.admit(),保留原生 Cookie、Host/Origin 与 Peer 校验;传输会话额外绑定认证 Cookie 与 authority,仅有 sessionId 而无有效认证不能访问。
仓库说明当前包含 30 项 自动测试,并在浏览器 WebSocket 构造器被阻断条件下完成过公网 HTTPS 界面、终端双向传输、取消与服务重启等验收(模型回复未纳入该次验收范围)。
安装与启用¶
在已安装 DSH 的机器上,对 web profile 执行官方安装命令(其他 profile 将 web 换成对应名称):
dsh plugin --profile web add github:wlyzqm/DSH-WebSocket2HTTP#v0.1.2
安装后 重启正在运行的 DSH Web 服务,再刷新浏览器。若需跟踪开发分支,可使用 github:wlyzqm/DSH-WebSocket2HTTP(不带版本标签)。源码为 JavaScript,无第三方运行依赖,不需要编译或发布到 npm;dsh plugin 的安装流程需要 pnpm,详见 DSH 官方打包与安装教程。
插件与 DSH 同进程运行,安装前建议阅读仓库源码与 MIT 许可证,确认符合你的安全与合规要求。
典型用法与检查是否生效¶
日常使用与未安装插件时相同:登录原生 Web 界面即可。代理需允许同源 HTTPS GET/POST,读超时建议 大于 20 秒;反代仍指向原 DSH Web 端口,无需新开端口。若代理超时更短,可调整 host.js 中 pollMs 默认值并重启服务。
登录后在浏览器控制台执行以下命令,确认 HTTP 传输是否建立:
__DSH_HTTP_TRANSPORT__.snapshot()
connected: true 表示 HTTP 传输会话已建立;streams 为活跃逻辑流数,sessions 在重连后会增加;lastFailure 仅记录最近失败的操作、状态码与短原因代码,不含凭证或会话 ID。也可通过已认证的 GET /api/http-transport/status 查看服务端计数(未登录返回 401,非法来源返回 403)。
适用场景与注意¶
适合:
- 企业网关或 HTTP 代理明确禁用 WebSocket。
- 网页与普通 API 可访问,但 DSH Web 界面 WebSocket 连接失败或反复重连。
- 希望继续使用原生 DSH Web 界面、会话和终端,而不是另部署一套前端。
注意:
- 启用后不会回退尝试 WebSocket;在网络本可用 WebSocket 的环境,是否安装需自行权衡。
- HTTP 后端经 HTTPS 反代时,建议按 DSH 公网部署要求 配置来源与 Cookie,避免把含启动令牌的 URL 写入访问日志。
- DSH 插件页面组件区可能同时显示相同文本的组件 ID 与包名(均为
dsh-websocket2http),1 total · 1 running表示实际只有一个运行组件。
停用或卸载可在 DSH 插件页面操作后按提示重启并刷新;CLI 卸载示例:
dsh plugin --profile web remove dsh-websocket2http
若停用后界面因 WebSocket 被禁而无法操作,可在服务所在机器通过 CLI 或 profile 配置移除该 bundle 后重启。
结尾¶
dsh-websocket2http 针对「Web 可用、WebSocket 不可用」的代理环境,把 DSH 原生 Web 实时链路改为 HTTP 长轮询,尽量保留原有界面与认证模型。社区目录(如 SkillHub)与 DeepSeek / 幻方无官方从属关系;Discover 市场索引与 GitHub dsh-plugin 主题并非同一机制,未收录时仍可用上文 GitHub 安装命令直接安装。