dsh-ws-deflate:为 DSH WebSocket 启用 permessage-deflate

前言

DeepSeek Harness(DSH)的 /api/remote.mux 使用 WebSocket 传输会话回放。在非本地网络(如 Tailscale、VPN、公网反向代理)中,链路存在延迟或丢包时,会话会反复重传同一份 transcript,导致带宽占用较高。同时 DSH 的 web 服务器只提供 HTTP gzip,不覆盖流式 WebSocket。dsh-ws-deflate 在不修改 DSH 安装树的前提下,为 WebSocket 传输开启 permessage-deflate,实测可减少约 70.9% 的传输字节数。

这是什么

这是一个 DSH 插件,用于在 DSH web 进程运行时为 WebSocket 传输开启 permessage-deflate。插件通过运行时 monkey-patch WebSocketServer.prototype.handleUpgrade,在握手阶段设置 this.options.perMessageDeflate,使 DSH 的 gateway 已经构建的 WebSocketServer({ noServer: true }) 使用压缩。插件以内存方式生效,不改变磁盘文件,因此卸载后无需恢复。

核心功能

  • 为 /api/remote.mux 的 WebSocket 握手启用 permessage-deflate,无需修改 DSH 安装目录。
  • 在内存中对 dsh 进程的 ws 模块进行 patch,设置压缩选项。
  • 压缩阈值为 1 KiB,低于此大小的帧不压缩(median 事件约 800 B)。
  • 压缩级别默认为 6,可配置;独立 deflate stream(noContextTakeover: true)。
  • 插件激活时执行自检:在本地 loopback 端口建立 WebSocketServer({ noServer: true }) 并完成握手,验证当前进程与 ws 副本支持 permessage-deflate。
  • 日志可配置成功协商次数上限(maxLog),默认 5。

安装与启用

dsh plugin --profile web add dsh-ws-deflate

安装后需要重启 dsh web 才能生效,因为插件列表在启动时读取。如果不想重启,可以编辑 cordis.patch.yml 并让配置热重载(.volatile() 字段)。

典型用法

在 dsh web 运行后,日志中应出现以下三行(示例):

[dsh-ws-deflate] permessage-deflate enabled -> …/node_modules/ws [ws 8.22.0] via path (level 6, threshold 1024 B, noContextTakeover on)
[dsh-ws-deflate] self test OK: this process negotiates permessage-deflate
[dsh-ws-deflate] negotiated permessage-deflate with Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) …

浏览器端可在 DevTools 的 Network → remote.mux 请求中查看 Response Headers,应包含类似:

Sec-WebSocket-Extensions: permessage-deflate; …

适用场景与注意

适合在非本地环境使用 dsh web 时安装,如通过 Tailscale/VPN、公网反向代理等存在延迟或丢包的场景。仅在 localhost 或局域网内使用时,压缩收益有限,可不必安装。

注意事项:

  • 插件是运行时 monkey-patch,非官方扩展点;每次 DSH 升级后,需要确认 patch 仍然有效。
  • 插件以当前 dsh 进程的权限运行,安装前建议查看源码与许可证(MIT)。
  • 插件不会修改 DSH 安装树中的文件,卸载后无需恢复任何配置或文件。

短结尾

dsh-ws-deflate 通过内存中的 wrapper 设置 perMessageDeflate,在不修改 DSH 安装树的前提下减少 WebSocket 传输字节数。适合在非本地环境使用 dsh web 的场景。目录页:https://www.skillhub.cn/plugins/Wanderingss/dsh-ws-deflate;GitHub:https://github.com/Wanderingss/dsh-ws-deflate

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜