project-issues.md 4.9 KB

mynetspeeder 项目问题清单

说明:本文只做项目体检,不修改代码。按“高风险 / 中风险 / 低风险”排序,优先列出最可能影响稳定性、排障和后续维护的问题。

高风险

  1. 配置缺少严格校验

    • 位置:config.py:54-89
    • 问题:Config.load() 直接读取 JSON 并套默认值,缺少字段类型、取值范围、必填项的统一校验。
    • 影响:配置写错后往往不是启动时立即失败,而是运行一段时间后才在网络路径、重连或统计逻辑里暴露,排查成本高。
  2. 并发状态机复杂,容易出现隐性竞态

    • 位置:relay_client.py:49-235transparent_edge.py:197-847socks_edge.py:241-680
    • 问题:连接、会话、winner 选择、重连、关闭清理都依赖大量异步任务和共享状态。
    • 影响:在高并发、短连接、抖动网络、对端异常关闭时,可能出现“会话已关但任务还在跑”“winner 已切换但旧路径未及时收敛”等边界行为。
  3. 异常处理偏宽,真实错误容易被吞掉

    • 位置:relay_client.pyrelay_server.pytransparent_edge.pysocks_edge.py
    • 问题:项目里大量使用 except Exception,部分分支只做 pass 或简单打印。
    • 影响:服务能尽量不中断,但很多根因不会被结构化记录,后续定位问题主要依赖人工翻日志。
  4. 日志格式强依赖,汇总结果脆弱

    • 位置:cli.py:18-295
    • 问题:summary 通过正则解析运行日志,完全依赖日志文本格式稳定。
    • 影响:只要日志文案略有调整,统计结果就可能漏算或错算,适合临时分析,不适合作为长期可靠报表源。

中风险

  1. 缺少自动化测试覆盖

    • 位置:仓库当前未见测试文件
    • 问题:网络代理、中继、UDP 竞速、透明接管这类逻辑对回归特别敏感,但目前没有明显的单测或集成测试保护。
    • 影响:改动一处逻辑,可能在另一路径上引入回归,尤其是重连、关闭、UDP 分包和 winner 收敛场景。
  2. 日志输出偏“人读友好”,不够机器化

    • 位置:relay_client.pyrelay_server.pytransparent_edge.pysocks_edge.py
    • 问题:当前更多是 print(...) 风格输出,缺少统一级别、字段、结构化上下文。
    • 影响:排障时可以看,但想做持续监控、指标采集、告警联动会比较费劲。
  3. UDP 路径语义较复杂,文档和实现容易产生认知偏差

    • 位置:README.mdscripts/start-transparent.shsocks_edge.pytransparent_edge.py
    • 问题:当前有“UDP 透明接管”和“显式 SOCKS5 UDP ASSOCIATE”两套入口,且 socks_port > 0 时会优先走 SOCKS 入口。
    • 影响:如果用户只看配置字面意思,容易误以为 UDP 透明和 SOCKS UDP 会同时生效,实际行为需要结合启动脚本理解。
  4. 重连与健康检查阈值偏经验化

    • 位置:config.py:31-38relay_client.py:60-75scheduler.py:24-58
    • 问题:重连间隔、ping 超时、open timeout、probe timeout 都是经验值。
    • 影响:在不同网络质量下,过于激进会误判,过于保守会拖慢故障恢复。
  5. 统计与调度逻辑耦合在一起,后续可维护性一般

    • 位置:scheduler.pycli.py
    • 问题:调度器和状态统计、探测输出、汇总逻辑之间复用不多,更多是“当前能用”。
    • 影响:未来如果要增加新策略、分层统计或更细粒度诊断,可能需要继续补很多旁路逻辑。

低风险

  1. 部分默认值偏保守,未必适合所有场景

    • 位置:config.py:24-53
    • 问题:例如 redundancydirect_redundancyudp_copy_interval_mstcp_loser_grace_ms 都是通用默认值。
    • 影响:不是 bug,但不同线路质量下可能需要手工调参才能达到最佳效果。
  2. README.md 信息量较大,入门成本略高

    • 位置:README.md
    • 问题:文档已经很完整,但新用户第一次看时会觉得模式、优先级、脚本行为比较多。
    • 影响:学习成本稍高,不过不影响核心功能。
  3. 脚本命名和入口较多,初次使用容易混淆

    • 位置:scripts/start.shscripts/start-transparent.shscripts/start_udp.shscripts/start-relay.sh
    • 问题:多个脚本分别负责不同模式,功能边界清楚,但命名上对新用户不够直观。
    • 影响:属于使用体验问题,不影响稳定性。

总结

  • 这套代码已经是“可运行、可交付”的状态,核心风险不在功能缺失,而在复杂并发场景下的可观测性和回归保护
  • 如果后续要继续提升,优先顺序建议是:配置校验 → 日志结构化 → 最小测试覆盖 → UDP/TCP 边界场景验证