- 初始化 → 创建会话 → 建立WebSocket连接
- 录音开始 → 发送音频数据 → 实时翻译
- 录音停止 → 发送结束标记 → 服务器处理完成
- 连接保持 → 等待下次录音或超时关闭
时间线:
T+0s: 发送结束标记
T+0s: 服务器收到结束标记,处理完成
T+0s: 服务器主动关闭连接(代码1006)
T+0s: 客户端检测到连接关闭
T+0s: 跳过重连(因为检测到服务器主动关闭)
时间线:
T+0s: 正在录音,发送音频数据
T+Xs: 网络中断或连接异常
T+Xs: WebSocket错误事件
T+Xs: 连接关闭(代码1006)
T+Xs: 客户端检测到异常关闭
T+Xs: 开始重连流程
ws.readyState: WebSocket连接状态- 0: CONNECTING - 连接中
- 1: OPEN - 已连接
- 2: CLOSING - 关闭中
- 3: CLOSED - 已关闭
isConnected: 内部连接状态标志conversationId: 会话ID
lastFinishTime: 最后发送结束标记的时间timeSinceFinish: 距离发送结束标记的时间间隔- 连接建立时间
- 连接持续时间
- 错误代码(1006, 1008, 1002等)
- 错误原因
- 重连次数
- 重连成功率
✅ WebSocket连接已建立
📤 发送配置信息成功
🎵 发送音频数据成功
🏁 发送结束标记成功
🔌 WebSocket连接已关闭 (代码1006)
ℹ️ 检测到服务器主动关闭连接,跳过重连
✅ WebSocket连接已建立
🎵 发送音频数据成功
❌ WebSocket错误事件
🔌 WebSocket连接已关闭 (代码1006)
🔄 准备尝试重连
🔄 尝试重连 (1/3)
- 服务器主动关闭:跳过重连,等待下次需要时重新建立
- 网络异常关闭:立即重连,最多重试3次
- 认证错误:清除认证信息,跳转登录
- 连接复用:检测现有连接,避免重复建立
- 健康检查:定期检查连接状态,及时发现异常
- 状态同步:确保录音状态和连接状态一致
- 错误分类:区分不同类型的连接错误
- 用户提示:提供友好的错误提示
- 自动恢复:在可能的情况下自动恢复连接
- 开始录音
- 说话(发送音频数据)
- 停止录音
- 观察连接状态
预期结果:
- 录音正常进行
- 发送结束标记后连接可能关闭(正常)
- 下次录音时重新建立连接
- 快速点击开始录音
- 立即停止录音
- 重复多次
预期结果:
- 录音状态正确管理
- 避免在停止状态下发送数据
- 连接状态稳定
- 在网络切换时进行录音
- 观察重连行为
预期结果:
- 检测到网络异常时自动重连
- 重连成功后继续录音
- 用户收到适当的提示
- 连接断开率:< 5%
- 重连成功率:> 90%
- 平均连接持续时间:> 30秒
- 录音成功率:> 95%
- 错误提示友好度:用户能理解当前状态
- 响应时间:< 2秒
- 使用日志分析工具统计错误模式
- 监控连接生命周期时间
- 分析重连成功率
- 监控WebSocket连接状态
- 统计音频数据发送频率
- 分析网络延迟和丢包率
- 收集用户报告的问题
- 分析错误发生的场景
- 持续优化用户体验
通过深入分析WebSocket连接的生命周期,我们发现:
- 服务器主动关闭是正常行为:在收到结束标记后,服务器会主动关闭连接
- 需要区分不同类型的关闭:主动关闭vs异常关闭
- 智能重连策略很重要:避免不必要的重连,提高用户体验
- 状态管理是关键:确保录音状态和连接状态的一致性
这些改进措施应该能够显著提升WebSocket连接的稳定性和用户体验。