文章
这里收录了我发布的全部文章。
-
tower(二):Layer 与 ServiceBuilder-中间件组合机制
Layer trait 定义了"如何把一个 Service 包装成另一个 Service", ServiceBuilder 提供声明式 API 将多个 Layer 按顺序堆叠. 中间件组合在编译期完成类型嵌套 (如 Timeout<RateLimit<ConcurrencyLimit<S>>>), 零运行时开销, 这是 tower 与 Express/Koa 等运行时中间件链的本质区别.
-
tower(一):Service trait-异步函数抽象与背压信号
tower::Service<Request> 把任何异步请求-响应操作抽象为一个 trait, 核心设计是 pollready + call 两步协议 -- 先问"你准备好了吗", 再发请求. pollready 的存在使得负载均衡器能探测下游容量, 实现真正的背压传播, 这是 tower 区别于其他中间件框架的根本设计决策.
-
hyper(三):与 axum、tower 的架构关系
hyper 处理 HTTP 协议 (字节流 ↔ Request/Response), tower 提供中间件组合框架 (Service + Layer), axum 在两者之上添加路由和类型安全的请求提取. 三者的分工是: hyper 管"线路上的字节", tower 管"请求的处理流水线", axum 管"开发者体验". 理解这个三层架构是在 Rust 中写 HTTP 服务的基础.
-
hyper(二):Body trait 与请求响应体
httpbody::Body trait 是 hyper 生态中所有 HTTP body 的统一抽象, 通过 pollframe 方法按帧返回数据 (data frames) 或 trailers, 实现零拷贝流式传输. hyper 1.0 将入站 body 固定为 Incoming 类型, 出站 body 由开发者从 Full<Bytes>, Empty<Bytes>, BoxBody 等中选择 -- 这种入站/出站类型分离是从 0.14 迁移时最大的心智模型变化.