Rust in Everything
基于 tower-http 0.7.1

动手

前面各部分是读 tower-http 的源码,这一部分反过来:不依赖 tower-http,自己写一个中间件,把全卷的两条主线各走一遍。写完之后,ResponseFuture 为什么要 Option 装着东西、body 包装为什么要有三处「算结束」、守卫为什么在 Drop 里不能 panic,都会变成你自己做过的决定。

  1. 从零写一个跨三个时刻的中间件:call 时开计时,响应 future 完成时用 Ready / RequiresEos 两态的分类器判断成败,poll_frame 里数字节、在三种结束条件下收尾,守卫从 future 移进 body,被提前丢掉时报告放弃在哪个阶段。
flowchart TB
  callNode["call:开计时,造守卫"] --> fut["响应 future:分类,守卫移进 body"]
  fut --> body["poll_frame:数字节,三种结束"]
  callNode -.->|"future 被丢"| a1["放弃:response future"]
  body -.->|"body 被丢"| a2["放弃:body"]

💬 关联讨论

发起讨论
加载中...