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

98 lines
3.2 KiB
Markdown
Executable File
Raw Permalink 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.

# 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**
```dart
"connection-test-url": "http://127.0.0.1:8080/test"
```
#### B. **禁用 URL 测试**
```dart
"url-test-interval": 0 // 禁用自动测试
```
#### C. **使用直接连接测试**
在应用层面实现延迟测试,不依赖 SingBox 的 URL 测试功能。
## 🧪 测试步骤
### 1. **测试新的 URL**
```bash
curl -I "http://www.gstatic.com/generate_204"
```
### 2. **手动触发测试**
在应用中调用:
```dart
await homeController.kr_manualUrlTest();
```
### 3. **使用直接连接测试**
```dart
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. 更稳定的测试结果