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.pswp.cn/news/915008.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/915008.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTTP相关知识

文章目录一、基础特性与规范二、页面元素与布局三、交互与表单四、网络通信基础流程(以浏览器访问网页为例)五、配套技术与工具六、知识关联图(简化版)一、基础特性与规范 技术定位:HTML 是前端技术栈的核心标记语言&…

机器人-组成结构

目录 一、发展历程 二、软件硬件算法深读耦合 感知 - 决策 - 执行 1.机械系统: 2.驱动系统: 3.感知系统: 4.控制系统: 5.决策/智能系统: 6.电源系统: 7.总结 一、发展历程 国际标准化组织(ISO)对…

pycharm结构查看器

v表示整个文件中定义的变量,c是类灰色部分是继承的父类的,明亮的是定义的,其中m表示定义的函数,f表示

AdsPower 功能详解 | 应用中心使用指南:插件统一管理更高效、更安全!

当你使用 AdsPower 管理多个浏览器环境时,插件的统一配置就变得尤为重要。而「应用中心」正是帮助你集中管理浏览器插件的功能入口,搭配浏览器环境使用,可以让账号操作更便捷、团队协作更高效。这篇教程将带你快速上手 AdsPower 应用中心的核…

回归预测 | MATLAB实现DBO-BP蜣螂算法优化BP神经网络多输入单输出回归预测

回归预测 | MATLAB实现DBO-BP蜣螂算法优化BP神经网络多输入单输出回归预测 目录 回归预测 | MATLAB实现DBO-BP蜣螂算法优化BP神经网络多输入单输出回归预测 预测效果 基本介绍 主要功能 逻辑关联与算法流程 1. 数据准备 2. DBO优化BP参数 3. BP神经网络构建 4. 预测与评估 运行…

Lsposed/Xposed

1.环境 1.1 xposed: 安卓8以下使用 下载并安装xposed installer,模拟器需勾选设置-共享磁盘。 若提示未激活,需要下载sdk sdk下载地址 放置目录 /sdcard/Android/data/de.robv.android.xposed.installer/cache/downloads/framework/文件权限设置 777 …

3D工业相机是什么?如何选择和使用它?

工业自动化越来越深入,3D成像技术(3D工业相机)在工业生产中越来越重要。这篇文章就来说说3D工业相机的技术原理、具体能应用在哪以及怎么选3D相机,给大家做个参考。一、 技术定义与核心特点3D工业相机,简单说就是一种特…

有哪些好用的原型设计软件?墨刀、Axure等测评对比

下面是几款常用原型设计软件的简介和对比,重点对墨刀和Axure进行了测评分析,帮助你根据需求做出选择。💡常见原型设计软件一览工具名称适合人群平台支持是否协作是否支持交互墨刀(MockingBot)产品经理/团队协作Web、Wi…

二叉树思想草稿

二叉树解体两种思路 是否可以通过遍历一遍二叉树得到答案? 用一个traverse函数配合外部变量实现遍历的思维模式 是否可以定义一个递归函数,通过子树的答案推导出原问题的答案? 递归三部曲: 函数定义,参数,返…

如何区分Bug是前端问题还是后端问题?

在软件测试中,精准定位Bug的归属(前端 or 后端)是高效协作的关键。以下是系统化的排查方法,结合技术细节和实战技巧: 1. 核心判断逻辑 「数据 vs 展示」二分法: 后端问题:数据本身错误(API返回错误数据/逻辑错误/数据库问题) 前端问题:数据正确但展示异常(UI渲染错…

深入解析操作系统中的文件控制块(FCB):从原理到现代实现演进

一、FCB的核心概念与基础结构文件控制块(File Control Block, FCB)是操作系统管理文件的核心元数据结构,充当文件系统与物理存储间的桥梁。FCB本质上是文件在内存中的映射,包含文件的所有管理信息。传统FCB通常占据32-44字节空间&…

python原生处理properties文件

这个工具类使用 Python 的 configparser 模块操作 .properties 文件,核心是将 .properties 格式适配为 configparser 支持的 .ini 格式。 核心代码解释 1. 类初始化与配置解析 class Properties:def __init__(self, file_path: str, encoding: str utf-8):self.fil…

【java 安全】 IO流

前言 IO是指 Input/Output,即输入和输出。以内存为中心: Input指从外部读入数据到内存,例如把文件从磁盘读取到内存,从网络读取数据到内存等等。Output指把数据从内存输出到外部,例如把数据从内存写入到文件&#xff0…

音视频同步技术初剖析:原理、实现与FFmpeg分析

音视频同步的基本原理 音视频同步主要依靠以下几个关键点:时间戳机制: 在封装格式(如MP4)中,音频帧和视频帧都带有时间戳(PTS, Presentation Time Stamp)这些时间戳表示该帧应该在什么时间被呈现同步策略: 音频为主时钟&#xff1…

掌控网页的魔法之书:JavaScript DOM的奇幻之旅

掌控网页的魔法之书:JavaScript DOM的奇幻之旅 在网页开发的世界里,JavaScript就像一位魔法师,而DOM(文档对象模型)则是它的魔法之书。没有DOM,JavaScript就像失去了咒语的巫师,无法操控网页的元…

【C语言】深入理解柔性数组:特点、使用与优势分析

C语言学习 柔性数组 友情链接:C语言专栏 文章目录C语言学习前言:柔性数组一、柔性数组的特点二、柔性数组的使用三、柔性数组的优势总结附录上文链接专栏前言: 在有结构体和动态内存分配的知识后,今天咱们来说说柔性数组吧&…

RV126平台NFS网络启动终极复盘报告

1. 初始目标与环境目标: 将RV1126开发板的启动方式,由从eMMC内部存储挂载根文件系统(rootfs),切换为通过网络挂载位于NFS服务器上的根文件系统。动机: 提升开发调试效率,实现代码修改后仅需重启即可验证,免…

一台显示器上如何快速切换两台电脑主机?

我注意到很多人会遇到一个常见的情况:他们有两台电脑,一台旧的用来处理基本的办公任务,另一台新的用来玩游戏。新手通常会用 DP端口连接第一台电脑的显示器,用 HDMI 连接第二台电脑。当他们想在两台电脑之间切换时,经常…

抗辐照与国产替代:ASM1042在卫星光纤放大器(EDFA)中的应用探索

摘要:本文以国科安芯推出的ASM1042芯片为例,通过分析ASM1042的抗辐照性能、高速数据传输能力、可靠性以及国产化优势,结合EDFA系统的需求特点,深入探讨了其在商业卫星光纤放大器(EDFA)项目中的应用潜力。AS…

鸿蒙ArkUI:声明式开发,高效构建全场景体验

目录 导言:开启鸿蒙应用开发的新范式 ArkUI框架概览 - 鸿蒙UI的灵魂 深入核心 - 声明式UI开发范式 命令式 vs 声明式:范式革命 ArkUI如何实现声明式? 创建内置组件 创建自定义组件 自定义组件的基本结构 ArkUI框架的核心特性与优势 …