Files
xyzw_web_helper/MD说明文件夹/问题修复-发车任务超时和Vue组件警告v3.9.3.md
2025-10-17 20:56:50 +08:00

10 KiB
Raw Permalink Blame History

问题修复-发车任务超时和Vue组件警告 v3.9.3

📋 问题描述

用户报告在执行批量发车任务时遇到两个问题:

问题1Vue 组件警告

[Vue warn]: Failed to resolve component: n-statistic-group
If this is a native custom element, make sure to exclude it from component resolution via compilerOptions.isCustomElement.

问题2发车任务全部超时失败

❌ [token_xxx] 发车任务失败: Error: 请求超时: car_getrolecar (1500ms)

所有6个账号的发车任务都因为请求超时而失败。

🔍 问题分析

问题1n-statistic-group 组件不存在

原因

  • TaskProgressCard.vue 中使用了 <n-statistic-group> 组件
  • Naive UI 中没有 n-statistic-group 这个组件
  • 应该使用 n-space 或其他布局组件来包裹多个 n-statistic 组件

错误代码

<n-statistic-group>
  <n-statistic label="总任务数" :value="..." />
  <n-statistic label="成功" :value="..." />
  <n-statistic label="失败" :value="..." />
</n-statistic-group>

问题2WebSocket 请求超时时间过短

原因分析

从用户提供的日志中可以看到:

🚗 [token_xxx] 开始查询俱乐部车辆...
📤 发送消息: car_getrolecar {}
❌ [token_xxx] 发车任务失败: Error: 请求超时: car_getrolecar (1500ms)

问题点

  1. 超时时间太短car_getrolecar 请求超时设置为1500ms1.5秒)
  2. 批量请求压力6个账号同时发送请求服务器可能响应较慢
  3. 网络延迟:实际网络延迟 + 服务器处理时间可能超过1.5秒
  4. WebSocket 消息队列:多个并发请求可能导致消息处理延迟

超时位置batchTaskStore.jssendCar 任务中有多处调用WebSocket命令超时时间都设置为1500ms

命令 调用次数 原超时时间 问题
car_getrolecar 3次 1500ms 查询车辆信息
car_refresh 1次 1500ms 刷新车辆
car_claim 1次 1500ms 收获车辆
car_send 1次 1500ms 发送车辆

解决方案

修复1替换不存在的组件

修改文件src/components/TaskProgressCard.vue

修复前

<n-statistic-group>
  <n-statistic label="总任务数" :value="Object.keys(taskResults).length" />
  <n-statistic label="成功" :value="successCount" class="success" />
  <n-statistic label="失败" :value="failedCount" class="failed" />
</n-statistic-group>

修复后

<n-space justify="space-around">
  <n-statistic label="总任务数" :value="Object.keys(taskResults).length" />
  <n-statistic label="成功" :value="successCount" class="success" />
  <n-statistic label="失败" :value="failedCount" class="failed" />
</n-space>

说明

  • 使用 n-space 替代不存在的 n-statistic-group
  • 设置 justify="space-around" 使统计项均匀分布
  • 保持原有的样式和功能

修复2增加 WebSocket 请求超时时间

修改文件src/stores/batchTaskStore.js

2.1 增加 car_getrolecar 超时时间5000ms

原因:查询车辆是最频繁的操作,需要更长的超时时间

修改位置

  1. 第1134行:初始查询车辆
// 修改前
const queryResponse = await client.sendWithPromise('car_getrolecar', {}, 1500)

// 修改后
const queryResponse = await client.sendWithPromise('car_getrolecar', {}, 5000)
  1. 第1209行:刷新后重新查询车辆
// 修改前
const reQueryResponse = await client.sendWithPromise('car_getrolecar', {}, 1500)

// 修改后
const reQueryResponse = await client.sendWithPromise('car_getrolecar', {}, 5000)
  1. 第1280行:发送前重新查询车辆
// 修改前
const finalQueryResponse = await client.sendWithPromise('car_getrolecar', {}, 1500)

// 修改后
const finalQueryResponse = await client.sendWithPromise('car_getrolecar', {}, 5000)

2.2 增加 car_refresh 超时时间3000ms

第1182行

// 修改前
await client.sendWithPromise('car_refresh', { carId: carId }, 1500)

// 修改后
await client.sendWithPromise('car_refresh', { carId: carId }, 3000)

2.3 增加 car_claim 超时时间3000ms

第1250行

// 修改前
await client.sendWithPromise('car_claim', { carId: carId }, 1500)

// 修改后
await client.sendWithPromise('car_claim', { carId: carId }, 3000)

2.4 增加 car_send 超时时间3000ms

第1293-1297行

// 修改前
await client.sendWithPromise('car_send', {
  carId: carId,
  helperId: 0,
  text: ""
}, 1500)

// 修改后
await client.sendWithPromise('car_send', {
  carId: carId,
  helperId: 0,
  text: ""
}, 3000)

📊 超时时间对比

操作 原超时时间 新超时时间 增加比例 说明
car_getrolecar 1500ms 5000ms +233% 查询操作,数据量大,需要更多时间
car_refresh 1500ms 3000ms +100% 刷新操作,服务器处理时间较长
car_claim 1500ms 3000ms +100% 收获操作,需要更新数据库
car_send 1500ms 3000ms +100% 发送操作,需要更新数据库

🎯 超时时间设计原则

为什么 car_getrolecar 设置为 5000ms

  1. 数据量大:查询所有车辆信息,包括车辆状态、奖励、刷新票等
  2. 频繁调用在一个发车任务中可能调用3次
  3. 批量请求:多个账号同时查询时,服务器压力大
  4. 容错性5秒的超时时间提供了足够的容错空间

为什么其他命令设置为 3000ms

  1. 单车操作:每次只操作一辆车,数据量较小
  2. 顺序执行:有延迟间隔,不会并发过多
  3. 快速响应:服务器处理单车操作相对较快
  4. 平衡性3秒既保证成功率又不会拖慢整体执行速度

🔄 修复效果

修复前

🚗 开始批量执行任务
📋 Token数量: 6
📋 任务列表: ['sendCar']

❌ [token_1] 发车任务失败: Error: 请求超时: car_getrolecar (1500ms)
❌ [token_2] 发车任务失败: Error: 请求超时: car_getrolecar (1500ms)
❌ [token_3] 发车任务失败: Error: 请求超时: car_getrolecar (1500ms)
❌ [token_4] 发车任务失败: Error: 请求超时: car_getrolecar (1500ms)
❌ [token_5] 发车任务失败: Error: 请求超时: car_getrolecar (1500ms)
❌ [token_6] 发车任务失败: Error: 请求超时: car_getrolecar (1500ms)

📊 统计信息: 成功 0, 失败 6

修复后(预期)

🚗 开始批量执行任务
📋 Token数量: 6
📋 任务列表: ['sendCar']

✅ [token_1] 发车任务完成
✅ [token_2] 发车任务完成
✅ [token_3] 发车任务完成
✅ [token_4] 发车任务完成
✅ [token_5] 发车任务完成
✅ [token_6] 发车任务完成

📊 统计信息: 成功 6, 失败 0

📝 相关文件

修改的文件

  1. src/components/TaskProgressCard.vue第348-363行

    • <n-statistic-group> 替换为 <n-space justify="space-around">
  2. src/stores/batchTaskStore.js

    • 第1134行car_getrolecar 超时 1500ms → 5000ms
    • 第1182行car_refresh 超时 1500ms → 3000ms
    • 第1209行car_getrolecar 超时 1500ms → 5000ms
    • 第1250行car_claim 超时 1500ms → 3000ms
    • 第1280行car_getrolecar 超时 1500ms → 5000ms
    • 第1293-1297行car_send 超时 1500ms → 3000ms

新增文件

  • MD说明/问题修复-发车任务超时和Vue组件警告v3.9.3.md

🧪 测试验证

测试1Vue 组件警告消失

  1. 刷新页面Ctrl + F5
  2. 打开浏览器控制台
  3. 执行批量任务
  4. 预期结果
    • 不再出现 Failed to resolve component: n-statistic-group 警告 ✓
    • 统计信息正常显示 ✓

测试2发车任务成功率提升

  1. 设置并发数为6
  2. 选择"发车"任务
  3. 执行批量任务
  4. 预期结果
    • 所有账号的发车任务成功完成 ✓
    • 不再出现超时错误 ✓
    • 发车状态正确显示 ✓

测试3高并发场景

  1. 设置并发数为20
  2. 选择"发车"任务
  3. 执行批量任务
  4. 预期结果
    • 大部分账号成功完成 ✓
    • 超时率显著降低 ✓

💡 优化建议

如果仍然遇到超时问题

方案1进一步增加超时时间

// car_getrolecar 增加到 8000ms
const queryResponse = await client.sendWithPromise('car_getrolecar', {}, 8000)

// 其他命令增加到 5000ms
await client.sendWithPromise('car_refresh', { carId: carId }, 5000)

方案2降低并发数

  • 从并发6个降低到并发3个
  • 减少同时发送请求的账号数量
  • 降低服务器压力

方案3增加重试机制

当前已有自动重试机制:

  • 在批量任务面板中启用"自动重试失败任务"
  • 设置最大重试轮数为5轮
  • 设置重试间隔为3秒

方案4增加请求间隔

在每个请求之间增加延迟:

await new Promise(resolve => setTimeout(resolve, 500)) // 增加到1000ms

🔄 版本信息

  • 版本号: v3.9.3
  • 修复日期: 2025-01-08
  • 修复内容:
    • 修复 Vue 组件警告n-statistic-group 不存在)
    • 增加发车任务 WebSocket 请求超时时间
    • car_getrolecar: 1500ms → 5000ms
    • car_refresh: 1500ms → 3000ms
    • car_claim: 1500ms → 3000ms
    • car_send: 1500ms → 3000ms
  • 依赖版本: v3.9.2

🐛 已知问题

如果网络极度不稳定

在网络质量极差的情况下,可能仍然会遇到超时。建议:

  1. 检查网络连接
  2. 降低并发数
  3. 增加超时时间到8000ms以上

服务器维护期间

如果服务器正在维护或响应缓慢,所有请求都可能超时。建议:

  1. 等待服务器恢复正常
  2. 检查服务器状态

📈 后续计划

  • 添加自适应超时时间(根据网络延迟动态调整)
  • 添加请求失败时的详细错误信息
  • 优化批量请求的调度策略
  • 添加请求耗时统计

问题已修复刷新页面Ctrl + F5即可看到修复效果