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

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

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

小夜