Skip to content

Conversation

@cyfung1031
Copy link
Collaborator

@cyfung1031 cyfung1031 commented Jan 31, 2026

[v1.3/1.4] VSCodeConnect 重构:提升 WebSocket 连接稳定性与可维护性

本次 PR 对 src/app/service/offscreen/vscode-connect.ts 进行重构,目标是改善旧版在连接管理、重连逻辑与异常处理上的不稳定与难维护问题,使 VS Code 热重载流程在长时间运行与异常场景下表现更可靠。

新旧对比一览

项目 旧版(修改前) 新版(修改后) 改进效果
连接管理方式 直接使用原生 WebSocket,事件与状态分散在 connect / connectVSCode 集中管理 WebSocket 生命周期,统一在单一类中处理连接、事件与清理 状态更集中,逻辑更容易理解与维护
连接超时保护 无连接超时,WebSocket 可能长期停留在 CONNECTING 明确 30 秒连接超时(CONNECT_TIMEOUT),超时后自动 cleanup 避免无期限等待,提高异常场景下的可靠性
自动重连机制 使用 setInterval 每 30 秒重试,逻辑简单粗放 使用 setTimeout + 延迟重连,记录 lastParams 并支援指数退避 减少无意义重试,重连行为更可控
旧事件残留 / race condition 多次 connect 时,旧 socket 的 close / error 仍可能影响新连接 引入 epoch 机制,所有回调需验证当前连接代数 避免旧事件干扰新连接,行为更可预测
资源清理 仅在部分流程中 close socket / clearInterval,事件回调未移除 统一 cleanup(),清除 socket、timer,并移除所有 WebSocket 回调 降低记忆体泄漏与僵尸连线风险
稳定脚本 ID 生成 直接使用 uuidv5(data.data.uri),未验证 payload 完整性 明确验证 script / uri 存在后才生成 stableId,并记录成功日志 避免异常 payload 导致安装错误
讯息处理健壮性 直接 JSON.parse,异常或未知 action 未处理 try-catch 包装解析流程,未知 action 与异常皆有日志 降低 crash 风险,除错更容易
日志详细度 仅少量 debug 日志 增加 debug / info / warn / error,多记录 epoch、url、uri 等关键信息 问题定位更直观
核心功能保留 hello 握手 + onchange 安装脚本 完整保留原有行为,仅重构流程与安全性 无功能变更,仅稳定性与可维护性提升

总结:旧版痛点 vs 新版价值

旧版主要问题

  • WebSocket 状态与事件分散,流程复杂且容易互相干扰
  • 缺乏连接超时与完善清理,异常情况下容易残留连接
  • 重连机制粗糙,长时间运行时行为难以预测

新版带来的好处

  • 连接、超时、重连、清理逻辑集中,状态更清楚
  • 能正确处理 VS Code 重启、连线失败、网路中断等情况
  • 日志更完整,未来除错与扩充成本更低

影响范围:仅限 VSCode 开发模式连接逻辑,不影响一般 ScriptCat 使用者。

测试建议

  • 正常热重载:VS Code 储存 .user.js → ScriptCat 是否即时更新
  • 断线重连:关闭 VS Code → 重新开启 → 是否能自动重新连接
  • 快速连线测试:多次触发「连接开发模式」→ 是否无异常错误或重复行为
  • 超时测试:使用无效 URL → 30 秒后是否正确 timeout 并进入重连流程

@cyfung1031 cyfung1031 force-pushed the pr-vsconnect-002 branch 6 times, most recently from c83a2d9 to a6c016e Compare January 31, 2026 13:43
VSCodeConnect 代码重构
@CodFrm CodFrm changed the title [v1.3/1.4] VSCodeConnect 代码重构 [v1.4] VSCodeConnect 代码重构 Feb 2, 2026
@CodFrm
Copy link
Member

CodFrm commented Feb 2, 2026

能放1.4就1.4了,现在两个版本内容挺多了,时间也挺久了

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants