Skip to content

【架构优化】从 devServerClientFor 中拆出开发服务器 HTTP 客户端构造 newDevServerHTTPClient #781

Open

Description

@fx-kurumi

现状问题

internal/runtime/browser_devserver.go 中的 devServerClientFor(约 61 行)同时承担三件事:

  1. 在 devServerClients 锁内淘汰空闲客户端、命中缓存直接返回;
  2. 缓存失效时查询沙箱端点并双检缓存;
  3. 内联构造一整套 http.Transport(DialContext 解析端口、走 devServerDial、包装 devServerDialError,以及连接池/超时参数)和 http.Client(禁止跟随重定向)。

第 3 部分约 30 行和缓存逻辑无关,却夹在加锁区域里,读缓存逻辑时要跳过一大段传输配置;传输层的行为(端口解析报错、拨号错误包装、不跟随重定向)也没法单独测试。

重构方案

  • 把第 3 部分原样抽成 newDevServerHTTPClient(endpoint browserEndpoint) *http.Client;
  • devServerClientFor 只保留缓存淘汰、端点查询和缓存写入,调用新函数拿到 client;
  • Transport 参数(MaxIdleConnsPerHost: 8、IdleConnTimeout: 90s、ResponseHeaderTimeout: 2m、ForceAttemptHTTP2: false)、注释、拨号逻辑和重定向策略逐字不变。

影响范围

仅 internal/runtime/browser_devserver.go 一个函数内部;包外接口、调用方、错误类型与文案均不变。新增一个测试文件。

验证方式

  • 新增单测覆盖 newDevServerHTTPClient:不跟随重定向、Transport 参数、拨号把 endpoint 与端口传给 devServerDial、拨号失败被包装为 devServerDialError、非法端口直接报错;
  • gofmt、go vet ./internal/runtime/、go test ./internal/runtime/ 通过。

Activity

  1. added a commit that references this issue on Nov 14, 2026
    d362bff
  2. Robert0622 commented on Nov 14, 2026

    @Robert0622
    Collaborator

    已对照当前 main 代码核实:internal/runtime/browser_devserver.go:133 的 devServerClientFor 内确实内联构造了完整的 http.Transport/http.Client(连接池、超时、拨号包装、禁止重定向),仓库内未发现 newDevServerHTTPClient(grep 无命中),与描述完全匹配,方案与验收标准清晰可执行,非重复。已记入本 Loop 候选,backlog 当前已满(5/5),待腾出名额后建单开发。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions