动手
前面各部分是读 tower 的源码,这一部分反过来:不依赖 tower,自己写一个能跑的最小版本。写一遍之后,poll_ready 为什么要先占资源、ResponseFuture 为什么要带着许可、Stack 为什么是 Stack<Inner, Outer>,都会变成你自己做过的决定。
- 从零写一个 tower:两个 trait 加一个
Builder;Timeout只动请求主线,ConcurrencyLimit两条主线都动;一个用通道实现的 mock 让测试代码决定什么时候回响应,用它看到poll_ready返回Pending、许可归还时唤醒调用方。
flowchart TB tr["Service 与 Layer"] --> st["Stack 与 Builder"] st --> to[Timeout] st --> cl[ConcurrencyLimit] to --> mk[手写 mock] cl --> mk mk --> bp[验证背压]
💬 关联讨论
发起讨论加载中...