当前位置: 首页 > news >正文

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: https://github.com/cloudwego/volo/compare/volo-http-0.3.0...volo-http-0.4.0

http://www.lryc.cn/news/589154.html

相关文章:

  • python学习---dayday6
  • AbMole小课堂 | Angiotensin II(血管紧张素Ⅱ)在心血管研究中的多元应用
  • Kimi-K2与DeepSeek-Chat全面对比:哪款AI大模型更强?
  • 【Python】定时器快速实现
  • React响应式组件范式:从类组件到Hooks
  • 嵌入式开发学习(第二阶段 C语言笔记)
  • 文心4.5开源背后的战略棋局:百度为何选择All in开放?
  • Python_1
  • xss-labs 1-8关
  • 零信任安全架构:如何在云环境中重构网络边界?
  • kotlin布局交互
  • 响应式编程入门教程第三节:ReactiveCommand 与 UI 交互
  • IDEA中删除多余的jdk选项 【IDEA2024版】
  • 数仓面试题
  • MongoDB数据问题说明
  • 论文笔记:Learning Cache Replacement with CACHEUS
  • BPE(字节对编码)和WordPiece 是什么
  • [雨云教程]端口冲突该如何解决
  • View2 UI聊天框架源码分享 - 支持[图文视频]混排 加入AI 分享一套功能强大的View2 UI聊天框架源码
  • 当Dynamics CRM On Promise 使用自建 CA(而非公共信任的 CA 如 DigiCert)时,集成中获取组织服务遇到证书问题处理:
  • Uniapp动态切换主题与老年模式详解
  • WebApplicationType.REACTIVE 的webSocket 多实例问题处理
  • 网络模型
  • TCP协议可靠性设计的核心机制与底层逻辑
  • 计算机系统方向可发会议/期刊参考时间
  • PostgreSQL 超详细安装与使用教程:从入门到实战
  • 【实时Linux实战系列】实时数据流的网络传输
  • Flutter Socket 连接方案分析与适用场景
  • 国产化Excel处理组件Spire.XLS教程:在 C# 中生成 Excel文件
  • excel 通过openpyxl表格下载和插入图片