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
英文地址,請注明出處:http://en.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框架的核心特性與優勢 …