在本站中
本站是开源的,仓库在 yuxuetr/rustineverything。这一部分的链接都指向提交 89a61b1(2026-10-23),行号以它为准。站点的代码不直接 use hyper:服务端经由 dioxus-server 0.7.9 和 axum 0.8.9,客户端经由 reqwest 0.12.28。那个提交的 Cargo.lock 锁的是 hyper 1.10.1、hyper-util 0.1.20,比本卷的 1.12.0 / 0.1.21 早;两页各自在末尾核对了这段差别,在本站用到的路径上行为没有变化。
- 服务端路径:release 构建里
dioxus::serve只调axum::serve(listener, router),每条连接auto::Builder::new(TokioExecutor::new())加serve_connection_with_upgrades,不设 timer,header_read_timeout的默认 30 秒不生效;慢连接靠前面的 Pingora 网关挡,网关用的是 pingora 的默认超时。进程没有处理 SIGTERM,容器停止时 tini 转来的信号直接结束进程,在途请求的客户端得到IncompleteMessage;本地实验复现了这一点,并给出with_graceful_shutdown加排空期限的改法。 - 出站客户端:OAuth、支付、LLM 三处都用 reqwest。reqwest 给 legacy
Client配了pool_timer和 90 秒空闲超时,但 hyper 客户端不给单个请求计时,reqwest 默认也不计时,所以每处都自己设了超时。OAuth 和支付每次新建Client,连接池用不上。测试必须.no_proxy():hyper-util 读 macOS 系统代理时不读例外列表,回环请求会被代理拿走。
flowchart TB gw["Pingora 网关"] --> axs["axum::serve"] axs --> auto["auto::Builder:无 timer"] auto --> router["axum Router"] router --> calls["OAuth / 支付 / LLM"] calls --> rq["reqwest"] rq --> lc["legacy Client"] lc --> up["外部 API"] term["SIGTERM"] -.->|无处理| axs
💬 关联讨论
发起讨论加载中...