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...

相关推荐
wan_da_ren40 分钟前
JVM监控及诊断工具-GUI篇
java·开发语言·jvm·后端
【本人】1 小时前
Django基础(一)———创建与启动
后端·python·django
lifallen1 小时前
Kafka 时间轮深度解析:如何O(1)处理定时任务
java·数据结构·分布式·后端·算法·kafka
mCell1 小时前
Webhook:连接、自动化与系统集成的新范式
ci/cd·go·github
不超限1 小时前
IIS错误:Service Unavailable HTTP Error 503. The service is unavailable.
网络·网络协议·http
你的人类朋友2 小时前
【✈️速通】什么是SIT,什么是UAT?
后端·单元测试·测试
OpenTiny社区3 小时前
告别代码焦虑,单元测试让你代码自信力一路飙升!
前端·github
程序无bug4 小时前
后端3行代码写出8个接口!
java·后端
绝无仅有4 小时前
使用LNMP一键安装包安装PHP、Nginx、Redis、Swoole、OPcache
后端·面试·github
他日若遂凌云志4 小时前
C++ 与 Lua 交互全链路解析:基于Lua5.4.8的源码剖析
后端