98 lines
3.2 KiB
Markdown
Executable File
98 lines
3.2 KiB
Markdown
Executable File
# 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. 更稳定的测试结果
|