关于WebSocket承载大体积数据的问题:慢链路下心跳误杀 + 整窗重发风暴 #6026
ClouderSky
started this conversation in
General
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
环境
dsh web(0.1.2-rc.1)。通过该网关远程访问 dsh web,在家庭宽带、办公网络、移动网络下均能复现。
现象
[connection] connection lost, retry #1;复现与证据(headless Chromium + CDP 逐帧抓取)
retry #1→ 整窗重发 → 循环根因分析
socket.terminate())时,Ping 被大帧压后,服务端按"发出时间"判定超时 → 误杀"慢但健康"的连接。观点(欢迎讨论)
坚持"WS 传信号、HTTP 传数据"的分层原则:体积不可预知/可能很大的批量内容(会话尾窗快照、历史分页)应走 HTTP(dsh 已有
session/page分页接口与 SSE 先例),WS 只承载有界、实时、交互性的信号与增量;快照与增量之间用 cursor 握手衔接,保证有序、无缝隙、可续传。退而求其次的近期可选改动:
临时止血(已在生产验证)
在 profile 补丁层(
$DSH_HOME/profiles/web/cordis.patch.yml)覆盖typert-gateway:注:心跳仍保留兜底(约 60s 内可感知死连接),只把误杀窗口放宽到慢链路的安全区。
All reactions