mirror of
https://github.com/GSManagerXZ/GameServerManager.git
synced 2026-06-20 08:22:16 +08:00
增强WebSocket断连恢复机制,优化重连策略和错误处理
This commit is contained in:
60
docs/WebSocket断连恢复加固说明.md
Normal file
60
docs/WebSocket断连恢复加固说明.md
Normal file
@@ -0,0 +1,60 @@
|
||||
# WebSocket断连恢复加固说明
|
||||
|
||||
## 问题背景
|
||||
|
||||
当前面板存在一类较难稳定复现的 WebSocket 断连问题。已观察到的服务端日志如下:
|
||||
|
||||
```text
|
||||
客户端断开连接: <socketId>, 原因: client namespace disconnect
|
||||
```
|
||||
|
||||
在部分场景下,前端会表现为 WebSocket 长时间无法恢复,刷新页面后仍不能正常重连,最终只能重启面板。
|
||||
|
||||
## 本次加固内容
|
||||
|
||||
### 1. 前端连接恢复策略增强
|
||||
|
||||
修改文件:
|
||||
|
||||
- `client/src/utils/socket.ts`
|
||||
|
||||
主要调整:
|
||||
|
||||
- 为重连流程增加独立定时器,避免多个重连任务互相叠加
|
||||
- 当连接进入异常状态时,允许重建底层 socket 实例,而不是只复用旧实例
|
||||
- 对 `client namespace disconnect` 增加恢复兜底,降低卡死在旧连接对象上的概率
|
||||
- 低功耗模式、手动登出等主动断开场景会显式标记,避免误触发自动重连
|
||||
- 遇到认证错误时会停止重连并跳转登录页,避免一直使用无效 token 重试
|
||||
|
||||
### 2. 服务端断连清理增加兜底
|
||||
|
||||
修改文件:
|
||||
|
||||
- `server/src/index.ts`
|
||||
- `server/src/modules/system/SystemManager.ts`
|
||||
- `server/src/modules/terminal/TerminalManager.ts`
|
||||
|
||||
主要调整:
|
||||
|
||||
- 将 `disconnect` 时的各个清理步骤拆开执行,并分别捕获异常
|
||||
- 增加 `disconnecting` 日志,便于排查断开前仍在订阅的房间
|
||||
- 对系统监控与终端进程订阅检查增加异常保护,避免断连后的异步检查影响整个进程
|
||||
|
||||
## 预期效果
|
||||
|
||||
- 某些客户端主动断开后遗留的异常状态,前端可通过重建 socket 实例尝试自恢复
|
||||
- 即使服务端断连清理某一步出现异常,也不会直接影响后续清理和整体 WebSocket 服务
|
||||
- 后续如果再次遇到类似问题,日志里可以更快定位是“客户端主动断开”还是“断开后的清理步骤异常”
|
||||
|
||||
## 建议验证方式
|
||||
|
||||
建议优先做局部验证,不需要立刻跑整套浏览器测试:
|
||||
|
||||
1. 登录面板后保持首页在线,确认 WebSocket 正常建立
|
||||
2. 手动触发低功耗模式进入和退出,确认连接可恢复
|
||||
3. 在文件监视、系统监控、终端页面之间切换后断网再恢复,观察是否能自动或手动重连
|
||||
4. 关注服务端日志中以下两类信息:
|
||||
- `客户端准备断开连接`
|
||||
- `客户端断开清理失败(...)`
|
||||
|
||||
如果后续还能复现,建议把同一时间段的这两类日志一并保留,能更快定位具体是哪一步导致恢复失败。
|
||||
Reference in New Issue
Block a user