
🤖 VOLO简介
Volo 是由字节跳动服务框架团队开源的一款高性能、易用的 Rust RPC 框架。
Volo 框架自身开销极低,并提供了命令行工具与灵活的中间件设计,让开发者可以轻松上手,享受 Rust 带来的开发乐趣。
本文介绍自 Volo-HTTP 0.3.0 版本以来的变更。
🚀 功能亮点
1.客户端易用性提升
此前的应用中,为了追求性能,我们在 Client
中使用了大量泛型,这导致其类型定义异常复杂,相关的错误信息也令人费解,增加了开发者的理解成本。
为了解决这个问题,我们在新版本中对 Client
的封装方式进行了优化,通过在最外层使用 Box
来包装内部的 dyn Future
。这一改动在确保类型简洁易用的同时,几乎不会引入额外的性能开销。 具体对比如下:
- 旧版本 (0.3.0): 用户需要构建一个带有复杂泛型类型的
DefaultClient
。 - 新版本 (0.4.0): 用户可以直接使用
Client
,类型更清晰,使用更简单。
2.支持HTTP/2
新版本现已为服务端和客户端提供了完整的 HTTP/2 支持,并且客户端也已支持连接池功能。
🔧其他变更
1.删除客户端的默认Target
考虑到客户端的默认Target
使用频率不高,但却使Target
的选择逻辑过于复杂,我们在此版本中移除了它。
不过,我们添加了TargetLayer
,可以强制Client
设置Target
,这样可以提供与以前类似的体验。
- 随着默认
Target
的移除,默认Host
的配置也被一并移除。我们重构了原有的Host
Layer,使其更加灵活,现在支持None
,Auto
,Force
,Fallback
四种模式。 - 默认的
callee name
已被移除,推荐使用TargetLayer
的with_callee_name
方法来代替。该方法主要用于通过 IP 地址访问 HTTPS 服务,并需要设置 SNI(服务器名称指示)的场景。 RequestBuilder::full_uri
已被移除。我们推荐通过Layer
的方式来实现该功能,而非直接在RequestBuilder
中操作。相关示例将稍后发布。
2.其他优化与调整
- 命名统一:
DefaultLB
和DefaultLBService
已重命名为DefaultLb
和DefaultLbService
。 - 废弃项移除: 移除了已废弃的
ClientRequest
,ServerRequest
,ClientResponse
,ServerResponse
类型。 - 代码简化: 减少了部分不必要的泛型约束。
- 日志修复: 修复了当
discover
的watch channel
关闭时,会无限循环打印警告日志的问题。 - 新增代理支持: 新增
HttpProxyLayer
,以支持 RFC7230 中定义的 HTTP 代理。 - 可观测性: HTTP 服务端现已支持
SpanProvider
。
🐞Bug修复
- 现在使用
DiscoverKey
作为Discover::Key
,替代了原先的(FastStr, u16)
元组。这解决了因域名带有端口,而导致的意外缓存问题。
重大变更
1.简化客户端
-
以下复杂的类型别名已被彻底移除:
ClientMetaService
ClientService
SimpleClient
DefaultClientOuterService
DefaultClient
-
Client
的泛型类型已从内部服务 (S
) 调整为请求体和响应体 (ReqBody
和RespBody
)。在绝大多数场景下,用户可以直接使用Client
而无需关心其泛型类型。
2.支持 HTTP/2
- 为支持 HTTP/2,我们引入了新的 Cargo features:
"http1"
和"http2"
。 - 默认 features 已更新为
["default-client", "default-server"]
。 - 请注意,
"default-client"
和"default-server"
仅启用 HTTP/1。
3.移除客户端的默认Target
-
以下与默认
Target
相关的函数已从ClientBuilder
中移除:ClientBuilder::address
ClientBuilder::host
ClientBuilder::with_port
ClientBuilder::with_scheme
ClientBuilder::target_ref
ClientBuilder::target_mut
-
Host
Layer 已被重构,ClientBuilder::default_host
已更新为ClientBuilder::host_mode
。 -
RequestBuilder::full_uri
已被移除。
📄完整更新日志
volo-http-0.3.0...volo-http-0.4.0[1]
参考资料 [1]
volo-http-0.3.0...volo-http-0.4.0: github.com/cloudwego/v...