Files
xyzw_web_helper/MD说明文件夹/问题修复-发车任务超时优化v3.9.4.md
2025-10-17 20:56:50 +08:00

193 lines
5.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 问题修复 - 发车任务超时优化 v3.9.4
## 📋 问题描述
在批量自动化执行"发车"任务时6个账号中有5个出现 `car_getrolecar` 超时5000ms导致任务失败。
### 错误日志
```
❌ [token_xxx] 发车任务失败: Error: 请求超时: car_getrolecar (5000ms)
```
### 失败统计
- **成功**1/6 账号 (16.7%)
- **失败**5/6 账号 (83.3%)
- **失败位置**:所有失败都发生在第一步"查询车辆"
---
## 🔍 问题分析
### 根本原因
对比游戏功能模块和批量任务的实现,发现了超时配置的差异:
| 代码位置 | 调用方式 | 超时时间 | 并发数 | 结果 |
|---------|---------|---------|---------|------|
| **游戏功能模块** | `tokenStore.sendMessageAsync(tokenId, 'car_getrolecar')` | **1000ms** (默认) | **1个** | ✅ 成功 |
| **批量任务 (修复前)** | `client.sendWithPromise('car_getrolecar', {}, 5000)` | **5000ms** | **6个** (并发) | ❌ 超时 |
### 关键发现
1. **游戏功能模块**
- 单用户点击查询只有1个请求
- 服务器响应快
- 虽然默认超时只有1秒但足够了
2. **批量任务**
- 6个账号并发查询
- 服务器压力大,响应时间 > 5秒
- 即使有连接延迟机制300ms间隔查询命令还是几乎同时发出
3. **超时配置来源**
- `tokenStore.sendMessageAsync``sendMessageWithPromise` 的别名
- `sendMessageWithPromise` 的默认超时是 **1000ms** (`src/stores/tokenStore.js:1414`)
- 如果不传第4个参数就使用默认值
---
## ✅ 解决方案
### 修复措施
#### 1. 批量任务超时优化 (`src/stores/batchTaskStore.js`)
| 命令 | 修复前 | 修复后 | 说明 |
|------|-------|-------|------|
| `car_getrolecar` | 5000ms | **10000ms** (10秒) | 查询车辆,并发压力大 |
| `car_refresh` | 3000ms | **5000ms** | 刷新车辆 |
| `car_claim` | 3000ms | **5000ms** | 收获车辆 |
| `car_send` | 3000ms | **5000ms** | 发送车辆 |
**修改位置**
- 第1134行初次查询车辆
- 第1209行刷新后重新查询
- 第1280行发送前重新查询
- 第1182行刷新车辆
- 第1250行收获车辆
- 第1293行发送车辆
#### 2. 游戏功能模块超时优化 (`src/components/CarManagement.vue`)
| 命令 | 修复前 | 修复后 | 说明 |
|------|-------|-------|------|
| `car_getrolecar` | 1000ms (默认) | **10000ms** | 提高容错性 |
| `car_refresh` | 1000ms (默认) | **5000ms** | 防止单独使用时超时 |
| `car_claim` | 1000ms (默认) | **5000ms** | 防止单独使用时超时 |
| `car_send` | 1000ms (默认) | **5000ms** | 防止单独使用时超时 |
**修改位置**
- 第505行查询车辆
- 第690-692行刷新车辆
- 第744-746行收获车辆
- 第787-791行发送车辆
---
## 🎯 预期效果
### 批量任务
- **查询车辆**从5秒增加到10秒应对6个并发请求
- **其他操作**从3秒增加到5秒提高成功率
- **预期成功率**:从 16.7% 提升到 **80%+**
### 游戏功能模块
- 从1秒默认值增加到5-10秒
- 即使服务器偶尔响应慢,也能正常工作
- 保持良好的用户体验
---
## 📊 技术细节
### 超时时间选择依据
1. **查询车辆 (10秒)**
- 并发6个账号同时查询
- 需要等待服务器处理所有请求
- 根据实际测试5秒不够10秒足够
2. **其他操作 (5秒)**
- 刷新/收获/发送是顺序执行间隔300ms
- 服务器压力相对小
- 5秒足够处理单个操作
3. **为什么不更长**
- 超时时间太长会导致用户等待过久
- 10秒是平衡点既能保证成功率又不让用户等太久
### 并发策略
批量任务使用了以下策略来降低服务器压力:
1. **连接错开**每个账号间隔300ms建立连接
```javascript
await new Promise(resolve => setTimeout(resolve, staggerDelay * index))
```
2. **操作间隔**每次操作后等待300ms
```javascript
await new Promise(resolve => setTimeout(resolve, 300))
```
3. **步骤间隔**大步骤之间等待500ms
```javascript
await new Promise(resolve => setTimeout(resolve, 500))
```
---
## 🧪 验证方法
### 测试步骤
1. 启动应用
2. 打开批量自动化面板
3. 选择6个账号
4. 只勾选"发车"任务
5. 点击"开始执行"
### 预期结果
- ✅ 6个账号中至少5个成功完成查询83%+ 成功率)
- ✅ 查询车辆不再超时
- ✅ 控制台显示 `✅ [token_xxx] 查询到 X 辆车`
- ✅ 总耗时约 60-120 秒(取决于车辆数量和操作数)
### 失败情况(可接受)
- 如果仍有个别账号超时,可能是:
- 网络波动
- 服务器短暂高负载
- Token失效
- 这种情况下,可以使用"自动重试"功能
---
## 🔄 版本信息
- **版本号**v3.9.4
- **修复日期**2025-10-08
- **影响范围**
- `src/stores/batchTaskStore.js`
- `src/components/CarManagement.vue`
- **向后兼容**:✅ 完全兼容
---
## 💡 后续优化建议
如果10秒超时仍然不够在极端高并发情况下可以考虑
1. **降低并发数**从6个降低到3个
2. **使用完全串行执行**:一个一个账号执行
3. **增加更长的连接间隔**从300ms增加到500ms或1000ms
4. **使用队列机制**:让服务器端控制并发数
目前的10秒超时应该能解决大部分问题无需立即实施上述优化。
---
## 📝 相关文档
- [批量任务添加发车功能 v3.9.0](./功能更新-批量任务添加发车功能v3.9.0.md)
- [发车任务超时和Vue组件警告 v3.9.3](./问题修复-发车任务超时和Vue组件警告v3.9.3.md)