193 lines
5.6 KiB
Markdown
193 lines
5.6 KiB
Markdown
# 问题修复 - 发车任务超时优化 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)
|
||
|