Volo-HTTP 0.4.0发布:正式支持 HTTP/2,客户端易用性大幅提升!

🤖 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 已被移除,推荐使用 TargetLayerwith_callee_name 方法来代替。该方法主要用于通过 IP 地址访问 HTTPS 服务,并需要设置 SNI(服务器名称指示)的场景。
  • RequestBuilder::full_uri 已被移除。我们推荐通过 Layer 的方式来实现该功能,而非直接在 RequestBuilder 中操作。相关示例将稍后发布。

2.其他优化与调整

  • 命名统一: DefaultLBDefaultLBService 已重命名为 DefaultLbDefaultLbService
  • 废弃项移除: 移除了已废弃的 ClientRequest, ServerRequest, ClientResponse, ServerResponse 类型。
  • 代码简化: 减少了部分不必要的泛型约束。
  • 日志修复: 修复了当discoverwatch channel 关闭时,会无限循环打印警告日志的问题。
  • 新增代理支持: 新增 HttpProxyLayer,以支持 RFC7230 中定义的 HTTP 代理。
  • 可观测性: HTTP 服务端现已支持 SpanProvider

🐞Bug修复

  • 现在使用 DiscoverKey 作为 Discover::Key,替代了原先的 (FastStr, u16) 元组。这解决了因域名带有端口,而导致的意外缓存问题。

重大变更

1.简化客户端

  • 以下复杂的类型别名已被彻底移除:

    • ClientMetaService
    • ClientService
    • SimpleClient
    • DefaultClientOuterService
    • DefaultClient
  • Client 的泛型类型已从内部服务 (S) 调整为请求体和响应体 (ReqBodyRespBody)。在绝大多数场景下,用户可以直接使用 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...

相关推荐
赵文宇(温玉)20 分钟前
Openclaw-In-Docker新版本发布,更轻、更快、更健壮,1600+次下载,30+Github关注
docker·容器·github·小龙虾·clawclaw
CoderJia程序员甲21 分钟前
GitHub 热榜项目 - 日榜(2026-03-23)
ai·大模型·llm·github·ai教程
2301_8059629339 分钟前
ESP32远程OTA升级:从局域网到公网部署
网络·后端·http·esp32
cyforkk40 分钟前
Spring Boot 3 集成 Swagger 踩坑实录:解决 doc.html 404 与 Unauthorized 拦截
spring boot·后端·html
badhope42 分钟前
Docker入门到实战全攻略
linux·python·docker·github·matplotlib
小码哥_常1 小时前
当@RequestBody遇上Request:数据去哪儿了?
后端
yige451 小时前
SpringBoot 集成 Activiti 7 工作流引擎
java·spring boot·后端
G探险者1 小时前
SQL 性能优化实战:一次压测 404 的根因追查与解决
后端
人间打气筒(Ada)1 小时前
如何使用 Go 更好地开发并发程序?
开发语言·后端·golang
honor_zhang1 小时前
Spring Boot集成Websocket服务以及连接时需要注意的问题
spring boot·后端·websocket