LighthouseApp/SINGBOX_TIMEOUT_ANALYSIS.md
speakeloudest 75d4c48e41
Some checks failed
Build Windows / build (push) Has been cancelled
feat: 源码提交
2025-10-19 23:30:54 -07:00

3.2 KiB
Executable File
Raw Blame History

SingBox 节点超时问题分析

🔍 问题分析

核心问题

从日志分析发现SingBox 的 URL 测试功能正在工作,但是测试失败,导致所有节点显示超时(delay=65535)。

关键日志证据

flutter: 👻 16:40:26.497617 INFO     SingBox - 📡 收到活动组更新,数量: 2
flutter: 👻 16:40:26.497808 INFO     KRLogUtil - 处理活动组: [SingboxOutboundGroup(tag: select, type: ProxyType.selector, selected: auto, items: [SingboxOutboundGroupItem(tag: auto, type: ProxyType.urltest, urlTestDelay: 65535)]), SingboxOutboundGroup(tag: auto, type: ProxyType.urltest, selected: 香港, items: [SingboxOutboundGroupItem(tag: 香港, type: ProxyType.trojan, urlTestDelay: 65535)])]

延迟值从 0 变成了 65535,说明:

  1. SingBox 的 URL 测试功能正在工作
  2. 但是测试失败了,返回超时值 65535

问题原因

SingBox 无法通过代理访问测试 URL http://connectivitycheck.gstatic.com/generate_204

这是一个经典的"鸡生蛋,蛋生鸡"问题:

  • SingBox 需要通过代理测试节点延迟
  • 但是代理本身可能无法访问外部测试 URL
  • 导致所有节点测试失败,显示超时

🛠️ 解决方案

1. 修改测试 URL

已将测试 URL 从 http://connectivitycheck.gstatic.com/generate_204 改为 http://www.gstatic.com/generate_204

2. 添加备用测试方法

  • kr_manualUrlTest() - 手动触发 SingBox URL 测试
  • kr_forceDirectTest() - 强制使用直接连接测试(绕过 SingBox URL 测试)

3. 可能的其他解决方案

A. 使用本地测试 URL

"connection-test-url": "http://127.0.0.1:8080/test"

B. 禁用 URL 测试

"url-test-interval": 0  // 禁用自动测试

C. 使用直接连接测试

在应用层面实现延迟测试,不依赖 SingBox 的 URL 测试功能。

🧪 测试步骤

1. 测试新的 URL

curl -I "http://www.gstatic.com/generate_204"

2. 手动触发测试

在应用中调用:

await homeController.kr_manualUrlTest();

3. 使用直接连接测试

await homeController.kr_forceDirectTest();

📊 预期结果

如果问题解决,应该看到:

└─ 节点[0]: tag=auto, type=ProxyType.urltest, delay=150
└─ 节点[0]: tag=香港, type=ProxyType.trojan, delay=200

延迟值应该是实际的毫秒数,而不是 0 或 65535。

🔧 下一步调试

  1. 重新运行应用,观察新的测试 URL 是否有效
  2. 如果仍然超时,尝试使用直接连接测试
  3. 考虑禁用 SingBox 的 URL 测试,完全依赖应用层面的延迟测试

📝 关键文件

  • lib/app/services/singbox_imp/kr_sing_box_imp.dart - SingBox 配置
  • lib/app/modules/kr_home/controllers/kr_home_controller.dart - 延迟测试逻辑
  • lib/app/modules/kr_home/controllers/kr_home_controller.dart - 直接连接测试

💡 根本解决方案

最佳解决方案是使用应用层面的直接连接测试,而不是依赖 SingBox 的 URL 测试功能。这样可以:

  1. 避免代理环境下的测试问题
  2. 提供更准确的延迟测量
  3. 更好的用户体验
  4. 更稳定的测试结果