阶段3: 文档更新(ARCHITECTURE/DEPLOY 摘除 STF 章节,STF_REMOVAL 标记代码完成+220 停容器待确认)

This commit is contained in:
2026-08-18 08:11:00 +08:00
parent a5ce57b6fd
commit 1573e82653
3 changed files with 46 additions and 63 deletions
+17 -26
View File
@@ -37,15 +37,15 @@
└──────────────┘ │ 状态/心跳 │ u2 操作
│ │ ▼
│ JSON API │ ┌─────────────────┐
▼ ┌──────────────┐ │ STF Device / adb │
┌──────────────┐ │ 看门狗监控 │ └─────────────────┘
│ web_server │ └──────────────┘
│ (Flask API) │
▼ ┌──────────────┐ │ 设备 adb │
┌──────────────┐ │ 看门狗监控 │ │ (IP:5555 直连 │
│ web_server │ └──────────────┘ │ / USB 远程) │
│ (Flask API) │ └─────────────────┘
└──────────────┘
│
▼
┌──────────────┐
│ data/users.db│ SQLite 持久化(用户/分组/任务/自定义动作/APK记录)
│ data/users.db│ SQLite 持久化(用户/分组/任务/设备池/自定义动作/APK记录)
└──────────────┘
```
@@ -64,34 +64,25 @@
## 3. 核心模块详解
### 3.1 STFClient(`core/stf_client.py`)
### 3.1 DevicePool(`core/device_pool.py`)
OpenSTF REST API 封装,负责设备池管理。
设备池(已摘除 OpenSTF):SQLite `devices` 表 = 设备清单,本机 adb = 在线状态。
**关键设计**:
- 所有请求带 `timeout=(5, 15)`,避免 STF 网关 504 时卡死
- `remote_connect` 带重试(3 次),STF provider 慢启动时需要
- 错误分类:`DeviceOfflineError`(不重试)/ `STFNetworkError` / `DeviceConflictError`(自动重试)
- 占用冲突自动清理重试(偶发 "already in use" 脏状态)
**核心方法**:
| 方法 | 说明 |
|------|------|
| `list_all_devices()` | 返回 STF 上所有设备(含状态) |
| `list_free_devices()` | 返回可占用的空闲设备 |
| `list_my_devices()` | 返回当前账户已占用的设备 |
| `occupy(serial)` | 占用设备(冲突自动重试) |
| `release(serial)` | 释放设备(含远程断开) |
| `remote_connect(serial)` | 建立远程 ADB 隧道,返回 remoteConnectUrl |
| `remote_disconnect(serial)` | 断开远程 ADB 隧道 |
- `list_configured()` — 清单(管理页维护,enabled=False 不参与调度)
- `list_online()` — 本机 adb 在线设备;池内有 USB 设备(serial 无冒号)时合并 220
远程 adb server(`USB_ADB_HOST:PORT`,host 网络模式 5037)状态
- `list_ready()` — 清单 ∩ 在线(任务调度用)
- CRUD — `add_device`(upsert)/ `remove_device` / `set_enabled`
- 单实例互斥由 `TaskManager._running[serial]` 内存锁保证(无跨实例占用概念)
- 全模块不 connect/kill-server/disconnect(遵守共享 adb transport 红线)
### 3.2 STFDevice + BaseWorker(`core/device_worker.py`)
**STFDevice** — 单设备生命周期管理:
- `acquire()`:占用 → remoteConnect → adb connect
- `release()`:adb disconnect → remoteDisconnect → STF release
- 直连模式:serial 为 `IP:5555` 时直接 adb connect,不走 STF 桥接
- `acquire()`:IP:5555 直连 adb connect;USB(serial 无冒号)校验 220 远程 adb server 可见性
- `release()`:无操作(不 disconnect,红线)
- 互斥由 TaskManager `_running` 保证,设备池负责在线判断
**BaseWorker** — 通用 Worker 基类(继承 threading.Thread):