WebFlux與HttpStreamable關系解析

1-Streamable

  • 1-WebFlux與HttpStreamable關系解析
  • 2-MCP協議Streamable HTTP

2-參考網址

  • MCP協議Streamable HTTP
  • MCP協議重大升級,Spring AI Alibaba聯合Higress發布業界首個Streamable HTTP實現方案

3-WebFlux與HttpStreamable關系解析

WebFlux 和 HttpStreamable 是兩個不同的概念,但它們在處理 響應式流(Reactive Streams)HTTP 流式數據傳輸 方面有一定的關聯。以下是它們的關系和區別:


1. WebFlux(Spring WebFlux)

  • 定義:Spring WebFlux 是 Spring Framework 5 引入的 響應式 Web 框架,基于 Reactor(或 RxJava)實現,支持非阻塞、異步的 HTTP 請求處理。
  • 核心特點
    • 基于 Reactive Streams 規范(Publisher/Subscriber 模型)。
    • 支持 SSE(Server-Sent Events)WebSocketHTTP 流式響應
    • 適用于高并發、低延遲的場景(如微服務、實時數據推送)。
  • 流式響應示例
    @GetMapping("/stream")
    public Flux<String> streamData() {return Flux.interval(Duration.ofSeconds(1)).map(i -> "Data chunk " + i);
    }
    
    這里返回的 Flux 會以流式(chunked)方式發送到客戶端。

2. HttpStreamable

  • 定義HttpStreamable 是 Spring Framework 6(Spring Boot 3)引入的一個 標記接口,用于指示一個對象可以直接以流式方式寫入 HTTP 響應。
  • 核心特點
    • 實現此接口的類可以繞過 Spring 的默認序列化邏輯(如 JSON 轉換),直接控制數據的寫入。
    • 通常用于 高效流式傳輸(如文件下載、大文本流、自定義二進制數據)。
  • 示例
    public class CustomStreamable implements HttpStreamable {@Overridepublic void writeTo(OutputStream outputStream) throws IOException {// 直接寫入輸出流outputStream.write("Streamed data".getBytes());}
    }@GetMapping("/custom-stream")
    public HttpStreamable customStream() {return new CustomStreamable();
    }
    

3. 兩者的關系

  1. 共同目標
    都支持 HTTP 流式傳輸(分塊編碼或 SSE),適用于大數據量或實時場景。

  2. 互補性

    • WebFlux 提供了高層次的響應式編程模型(Flux/Mono),適合處理異步流數據。
    • HttpStreamable 提供了低層次的流控制,適合直接操作原始輸出流,避免序列化開銷。
  3. 使用場景

    • 如果需要 復雜的響應式邏輯(如背壓、組合流),優先用 WebFlux 的 Flux
    • 如果需要 直接操作字節流(如文件、自定義協議),用 HttpStreamable 更高效。

4. 總結

特性WebFlux (Flux/Mono)HttpStreamable
層級高層次的響應式抽象低層次的流式寫入接口
適用場景異步數據流、SSE、WebSocket直接操作輸出流(如文件下載)
性能優化依賴 Reactor 的背壓機制繞過序列化,直接寫入
Spring 版本5.x+6.x+(Spring Boot 3)

在實際項目中,可以結合使用兩者:

  • 用 WebFlux 處理大多數響應式流。
  • HttpStreamable 優化特定場景(如大文件傳輸)。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/80163.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/80163.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/80163.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

順豐科技:從 Presto 到 Doris 湖倉構架升級,提速 3 倍,降本 48%

導讀&#xff1a;順豐科技引入 Doris 替換 Presto&#xff0c;在內部可視化數據自助分析工具豐景臺場景廣泛應用。目前&#xff0c;順豐臨時查詢業務、豐景臺報表業務的 Presto 場景已經 100% 切換到 Doris 集群中&#xff0c;日均查詢量 100W。并實現 P95 性能提升近 3 倍&…

如何在Jmeter中調用C程序?

在JMeter中調用C語言程序可以通過以下幾種方式實現&#xff1a; 方法一&#xff1a;使用OS Process Sampler JMeter的“OS Process Sampler”可以用來調用外部程序&#xff0c;包括C語言編寫的可執行文件。 步驟&#xff1a; 準備C語言程序&#xff1a; 編寫C語言代碼并編譯…

python 中的單例

在 Python 里&#xff0c;單例模式指的是一個類僅有一個實例&#xff0c;并且提供一個全局訪問點來獲取該實例。下面為你介紹幾種實現單例模式的常見方法。 1. 使用模塊 在 Python 里&#xff0c;模塊天然就是單例模式。當模塊被導入時&#xff0c;Python 會對其進行一次加載…

Linux58 ssh服務配置 jumpserver 測試雙網卡 為何不能ping通ip地址

判斷為NAT模式網卡 能ping 通外網 ens34為僅主機模式網卡 [rootlocalhost network-scripts]# ip route show default default via 10.1.1.254 dev ens33 proto static metric 100 10.0.0.0/8 dev ens33 proto kernel scope link src 10.1.1.37 metric 100 11.0.0.0/8 dev…

web 自動化之 selenium+webdriver 環境搭建及原理講解

文章目錄 一、web 自動化測試學習說明二、什么 web 自動化測試三、selenium 簡介四、web自動化測試環境搭建五、web 自動化測試第一個腳本六、selenium 原理及源碼講解 一、web 自動化測試學習說明 進階 web 自動化測試學習&#xff1a;掌握 python 編程基礎 二、什么 web 自…

Linux 網絡命名空間:從內核資源管理到容器網絡隔離

1. 網絡命名空間是什么? 網絡命名空間(Network Namespace) 是 Linux 內核提供的一種網絡資源隔離機制,用于為進程或容器創建完全獨立的網絡環境。它并非物理或虛擬的網絡接口(如網卡、veth pair 等),而是一個虛擬容器,包含以下資源的獨立實例: 網絡接口(物理或虛擬)…

SQL知識點總結

總結的知識點主要來源于前段時間在牛客刷SQL題目中遇到的錯誤 目錄 1.WHERE字句不能與高級函數連用 2.去重——distinct 3.不等于某個值 4.查多個范圍內的值 5. 升/降序排序 6.占位符 7.統計某類別總數計算平均值 8.合并查詢——UNION &#xff08;ALL&#xff09; 9…

【軟考-高級】【信息系統項目管理師】【論文基礎】采購管理過程輸入輸出及工具技術的使用方法

采購管理概念 項目采購管理包括從項目團隊外部采購或獲取所需產品、服務或成果的各個過程。項目采購管理包括編制和管理協議所需的管理和控制過程&#xff0c;例如合同、訂購單、協議備忘錄&#xff08;MOA&#xff09;和服務水平協議&#xff08;SLA&#xff09;。 采購管理…

C++ 手寫一個內存池

內存池是一種內存管理技術&#xff0c;它預先分配一大塊內存&#xff0c;之后將其按需分割成多個小塊供程序使用。下面將詳細闡述它的好處以及適用場景。 內存池的好處 減少內存碎片&#xff1a;在動態內存分配時&#xff0c;頻繁地分配和釋放不同大小的內存塊&#xff0c;會…

LeetCode 3341.到達最后一個房間的最少時間 I:Dijkstra算法(類似深搜)-簡短清晰的話描述

【LetMeFly】3341.到達最后一個房間的最少時間 I&#xff1a;Dijkstra算法&#xff08;類似深搜&#xff09;-簡短清晰的話描述 力扣題目鏈接&#xff1a;https://leetcode.cn/problems/find-minimum-time-to-reach-last-room-i/ 有一個地窖&#xff0c;地窖中有 n x m 個房間…

學習Linux的第四天

今天我們來學習Linux的網絡配置&#xff0c;以及鏈表的知識開個小頭 三種網絡配置模式 橋接模式&#xff08;用的最多&#xff09; 2.Nat模式 3. 僅主機模式&#xff08;Nat模式的功能外&#xff0c;只能在局域網通信&#xff0c;不能訪問外網&#xff09; 橋接模式&#xf…

【 window.addEventListener(‘message‘, handleMessage)無效的問題】

在react native加載中可能出現 window.addEventListener(‘message’, handleMessage)無效&#xff0c;無法監聽到在react-native-webview中通過postMessage發送的消息&#xff0c;可以通過下面的方法來處理 window.addEventListener(message, handleMessage);document.addEven…

css識別\n換行

在CSS中&#xff0c;\n 通常不會被識別為換行符。如果你希望在CSS中實現換行效果&#xff0c;可以使用以下幾種方法&#xff1a; 使用 white-space 屬性&#xff1a; 設置 white-space: pre 或 white-space: pre-wrap&#xff0c;這樣文本中的換行符 \n 會被保留并顯示為換行。…

電容知識小結

1.同樣是電容&#xff0c;1uf的陶瓷電容和1uf的鋁電解電容是不一樣的&#xff1b; 2.實際的電容等效為ESR C ESL;ESR等效電阻和ESL等效電感&#xff1b; 3.鋁電解電容&#xff0c;瓷片電容和鉭電容。 4.電容是容納和釋放電荷的電子器件&#xff1b; 5.電容的工作&#xff1a;…

[逆向工程]什么是HOOK(鉤子)技術(二十一)

[逆向工程]什么是HOOK&#xff08;鉤子&#xff09;技術&#xff08;二十一&#xff09; HOOK&#xff08;鉤子&#xff09;是一種系統級或應用級的消息攔截與處理機制&#xff0c;廣泛用于監控、修改或增強程序行為。其核心思想是在特定事件&#xff08;如鍵盤輸入、函數調用…

java后端知識點復習

# 復習匯總 ### &#x1f9d1;?&#x1f4bb; User java關于高并發下的銀行轉賬問題&#xff0c;根據具體的例子來講解清楚 --- ### &#x1f916; Assistant --- ### &#x1f9d1;?&#x1f4bb; User java關于高并發下的銀行轉賬問題&#xff0c;根據具體的例子來講…

PostgreSQL安裝與升級cron插件

cron插件是PostgreSQL數據庫一個好用的定時任務管理的插件。 注&#xff1a;以下命令均在debian linux bookworm版本系統上驗證通過。 apt安裝cron插件 #獲取軟件包驗證的公鑰 wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add - #…

66、微服務保姆教程(九)微服務的高可用性

微服務的高可用性與擴展 服務的高可用性 集群搭建與負載均衡。服務的故障容錯與自愈。分布式事務與一致性 分布式事務的挑戰與解決方案。使用 RocketMQ 實現分布式事務。微服務的監控與可觀測性 metrics 和日志的收集與分析。sentinel 的監控功能。容器化與云原生 將微服務部署…

6. HTML 錨點鏈接與頁面導航

在開發長頁面或文檔類網站時,錨點鏈接(Anchor Links)是一個非常實用的功能。通過學習 HTML 錨點技術,將會掌握如何在同一頁面內實現快速跳轉,以及如何優化長頁面的導航體驗。以下是基于給定素材的學習總結和實踐心得 一、什么是錨點鏈接? 錨點鏈接(也稱為頁面內鏈接)允…

【iOS】源碼閱讀(三)——內存對齊原理

文章目錄 前言獲取內存大小的三種常用方式sizeofclass_getInstanceSizemalloc_size 總結 前言 之前學習alloc相關源碼&#xff0c;涉及到內存對齊的相關內容&#xff0c;今天筆者詳細學習了一下相關內容并寫了此篇博客。 獲取內存大小的三種常用方式 獲取內存大小的方式有很多…