精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

SpringBoot + ResponseBodyEmitter 實時異步流式推送,優雅!

開發 前端
ResponseBodyEmitter? 是 Spring 框架提供的輕量級流式傳輸解決方案,它能夠顯著提升高并發和實時性場景下的用戶體驗。通過 ResponseBodyEmitter,我們可以輕松實現服務器向客戶端的實時數據推送。

ChatGPT 的火爆,讓流式輸出技術迅速走進大眾視野。在那段時間里,許多熱愛鉆研技術的小伙伴紛紛開始學習和實踐 SSE 異步處理。

我當時也寫過相關文章,今天,咱們換一種更為簡便的方式來實現流式輸出,那就是 ResponseBodyEmitter。

其實,ResponseBodyEmitter 并非新技術,早在 Spring Framework 4.2 版本就已被引入。直到最近,我們在開發一個滾動日志輸出功能時,才深入了解到它的強大之處。

ResponseBodyEmitter 的作用

相較于 SSE 技術,ResponseBodyEmitter 更加簡單易用。它主要用于處理異步的 HTTP 響應,其核心優勢在于 允許逐步將數據發送到客戶端,而非一次性發送所有內容。這一特性使得它在需要長時間處理或進行流式傳輸的場景中表現出色。需要注意的是,ResponseBodyEmitter 本質上是一個接口。

使用場景

  1. 長輪詢:服務器在有數據時會立即響應客戶端請求,若暫無數據,則保持連接開放,等待數據到來。
  2. **服務器推送事件 (SSE)**:服務器能夠持續不斷地向客戶端推送各類事件,實現實時交互。
  3. 流式傳輸:可逐步發送大量數據,像文件下載或者實時數據流傳輸等場景都適用。
  4. 異步處理:在處理耗時任務時,能逐步返回處理結果,避免客戶端長時間等待,提升用戶體驗。

業務場景舉例

在實際業務中,ResponseBodyEmitter 有著廣泛的應用,比如進度條的實時更新、實時聊天功能、股票價格的實時更新、系統日志的流式輸出以及 AI 的流式響應等。

實時日志流實戰

接下來,我們通過一個簡單的實時日志流功能,來深入了解 ResponseBodyEmitter 的使用。假設我們有一個應用程序,需要實時查看服務器的日志,以便快速定位和解決問題。

創建控制器

首先,我們在 Spring Boot 應用中創建一個控制器,借助 ResponseBodyEmitter 實現實時日志流。

import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyEmitter;

@RestController
@RequestMapping("/api/log")
publicclass LogController {
    @GetMapping(value = "/stream", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
    public ResponseBodyEmitter streamLogs() {
        ResponseBodyEmitter emitter = new ResponseBodyEmitter();

        // 開啟異步線程處理數據并發送
        new Thread(() -> {
            try {
                while (true) {
                    String logEntry = getLatestLogEntry();
                    if (logEntry != null) {
                        emitter.send(logEntry);
                    }
                    // 每秒檢查一次日志更新
                    Thread.sleep(1000); 
                }
            } catch (Exception e) {
                // 出現異常時結束響應并傳遞錯誤信息
                emitter.completeWithError(e); 
            }
        }).start();

        return emitter;
    }

    private String getLatestLogEntry() {
        // 模擬從日志文件中獲取最新日志條目
        return"2025-02-12 12:00:00 - INFO: User logged in successfully.";
    }
}

運行效果

當我們啟動這個應用程序,并訪問 /api/log/stream 路徑時,就能看到一個實時更新的日志流。服務器會每秒向客戶端推送一條新的日志條目,客戶端會將其顯示在頁面上,效果如下:

運行效果運行效果

ResponseBodyEmitter 的核心方法

  • send(Object data):向客戶端發送數據,該方法可以多次調用,實現數據的逐步發送。
  • complete():用于結束響應流,表示數據已經全部發送完畢。
  • onTimeout(Runnable callback):設置超時回調函數,當連接超時時,會執行該回調。
  • onCompletion(Runnable callback):設置完成回調函數,當數據發送完成后,會執行該回調。

ResponseBodyEmitter 工作原理

異步數據生成與推送

在傳統的 HTTP 請求 - 響應模式中,服務器通常需要等待整個響應數據生成完成后,才會將其一次性發送給客戶端。關注公眾號:碼猿技術專欄,回復關鍵詞:1111 獲取阿里內部Java性能調優手冊!而 ResponseBodyEmitter 打破了這種模式,它允許服務端在任務執行過程中異步地生成響應數據。

當有部分數據準備好時,就可以立即調用 send() 方法將這些數據推送給客戶端,而無需等待整個任務完成。這就好比一場接力賽,每完成一段賽程(生成一部分數據),就馬上將接力棒(數據)傳遞給客戶端,大大提高了數據傳輸的實時性。

分塊傳輸機制

ResponseBodyEmitter 采用了 HTTP 的分塊編碼(Chunked Encoding)方式來傳輸數據。在傳統的 HTTP 響應中,通常需要在響應頭中明確指定 Content-Length,表示整個響應數據的長度。但在分塊傳輸中,服務器不會提前設置 Content-Length,而是將數據分成多個獨立的塊,每個塊都有自己的長度標識。

客戶端在接收到數據塊后,可以立即對其進行處理,而不必等待整個響應數據接收完畢。這種方式使得數據可以邊生成邊傳輸,減少了客戶端的等待時間,提高了用戶體驗。

連接生命周期管理

為了確保資源的合理使用,ResponseBodyEmitter 提供了對連接生命周期的有效管理。當所有數據都發送完畢后,需要調用 complete() 方法來明確告知客戶端響應結束,關閉連接。如果在數據傳輸過程中出現異常,可以調用 completeWithError() 方法,結束響應并向客戶端傳遞錯誤信息。

這樣可以避免連接長時間保持開放,造成資源浪費。

注意事項

  1. 客戶端支持:雖然大多數瀏覽器和 HTTP 客戶端庫都支持分塊傳輸,但某些老舊的客戶端可能存在兼容性問題。
  2. 超時設置:為避免長連接長時間占用資源,可以為 ResponseBodyEmitter 設置超時時間,示例代碼如下:
emitter.onTimeout(() -> emitter.complete());
  1. 線程安全:ResponseBodyEmitter 的 send() 方法是線程安全的,但在使用時需要注意控制任務線程的生命周期,避免出現資源泄漏。
  2. 連接關閉:務必確保在任務結束時調用 complete() 或 completeWithError() 方法,否則可能導致連接無法正常關閉,造成資源浪費。

與 Streaming 和 SSE 的對比

  • Streaming:直接通過 OutputStream 向客戶端寫入數據,靈活性較高,但需要手動處理流的關閉,增加了開發的復雜度。
  • Server-Sent Events (SSE):基于 text/event-stream 協議,適用于服務端事件推送場景,但要求客戶端支持 SSE 協議。
  • ResponseBodyEmitter:通用性更強,適用于任何支持 HTTP 的客戶端,并且易于與 Spring 框架集成,是一種更為便捷的流式傳輸解決方案。

在處理類似 AI 這種響應式的流式輸出場景時,相較于 SSE,ResponseBodyEmitter 作為 Spring 提供的輕量級流式傳輸解決方案,在 HTTP 協議兼容性方面表現更優。

小結

ResponseBodyEmitter 是 Spring 框架提供的輕量級流式傳輸解決方案,它能夠顯著提升高并發和實時性場景下的用戶體驗。通過 ResponseBodyEmitter,我們可以輕松實現服務器向客戶端的實時數據推送。

無論是進度條的實時更新、實時聊天、股票價格的實時監控還是系統日志的流式輸出,ResponseBodyEmitter 都能幫助我們構建更加動態和互動的應用程序。

責任編輯:武曉燕 來源: 碼猿技術專欄
相關推薦

2025-09-02 09:32:33

Spring工具項目

2025-07-22 02:10:00

2025-03-10 08:44:17

2018-09-18 16:20:08

Asyncjavascript前端

2025-03-26 00:00:00

Spring服務器推送技術

2025-06-26 04:10:00

2024-08-06 09:43:54

Java 8工具編程

2025-09-08 03:15:00

JavaScript數據流接口

2011-12-30 13:50:21

流式計算Hadoop

2021-11-10 10:03:18

SpringBootJava代碼

2023-06-28 08:25:14

事務SQL語句

2023-01-30 07:41:43

2024-12-26 07:47:05

Spring管理配置

2013-04-27 10:32:51

大數據全球技術峰會大數據流計算

2017-09-05 15:30:00

JavascriptSocket.ioNode.js

2024-10-18 08:53:49

SpringMybatis微服務

2024-03-18 14:06:00

停機Spring服務器

2025-07-10 07:24:54

Spring支付策略類

2025-03-17 00:00:00

2024-05-29 08:12:55

接口參數格式
點贊
收藏

51CTO技術棧公眾號

www亚洲色图| 欧美 日韩 国产在线观看| 在线播放国产一区| 亚洲天堂免费| 日韩av网站大全| aaaaaa亚洲| 蜜桃视频在线观看www社区| 国产91露脸合集magnet| 国产99久久精品一区二区永久免费 | 免费在线小视频| 国产精品私人影院| 国产精品自拍首页| 91激情在线观看| 亚洲欧美成人| 欧美激情xxxxx| 蜜桃av乱码一区二区三区| 婷婷视频一区二区三区| 欧美日韩中文一区| 黄色一级视频片| 日本www在线观看| 91麻豆精品在线观看| 亚洲最大av网| 美女黄页在线观看| 亚洲在线免费| 欧美激情精品久久久| 国内毛片毛片毛片毛片毛片| 日韩高清一级| 精品久久久久久最新网址| 五月天激情播播| 欧亚一区二区| 欧美性猛交xxxxx免费看| 黄色污污在线观看| 日本免费在线观看| 国产欧美一区二区在线| 狠狠色噜噜狠狠狠狠色吗综合| 国产美女自慰在线观看| 日本欧美加勒比视频| 8x拔播拔播x8国产精品| 九九九国产视频| 欧美在线黄色| 久久这里只有精品视频首页| 91视频免费看片| 成人av资源电影网站| 亚洲男人天天操| 国产一级二级在线观看| 精品嫩草影院| 日韩精品一区二区在线观看| www.偷拍.com| 精品一区二区三区中文字幕| 欧美日本免费一区二区三区| 一级黄色录像在线观看| 日韩在线你懂得| 欧美日本高清视频在线观看| 亚洲少妇久久久| 日韩精品一区二区三区av| 欧美视频精品一区| 国产免费视频传媒| 成人mm视频在线观看| 欧美亚洲国产bt| 三上悠亚在线一区二区| 丁香婷婷久久| 欧美丰满少妇xxxxx高潮对白 | 日韩av一二三区| 亚洲激情在线| 亲爱的老师9免费观看全集电视剧| 国产黄色片免费看| 视频在线观看国产精品| 国产精品女人久久久久久| 涩涩视频在线观看| 国产一区二区精品久久91| av一本久道久久波多野结衣| 欧美一级片免费| 99九九99九九九视频精品| 欧美日本韩国一区二区三区| h视频在线免费| 亚洲视频一二三区| 欧美日韩一道本| 欧美一级二级视频| 欧美另类久久久品| 妖精视频一区二区| 国产一区二区三区91| 久久精品电影网| 久久99久久98精品免观看软件 | 亚洲女人的天堂| 成人免费网站入口| 免费成人美女女| 欧美高清视频一二三区| aaa黄色大片| 美女久久99| 久久精品中文字幕电影| 99免费在线观看| 免费在线观看精品| www日韩av| 春暖花开成人亚洲区| 亚洲欧美国产高清| 国语对白做受xxxxx在线中国| 免费视频成人| 亚洲成人激情在线观看| 日韩免费成人av| 欧美午夜久久| 国产精品久久久久久搜索| 午夜精品小视频| 欧美经典一区二区| 国产www免费| 亚洲精品乱码日韩| 精品无人国产偷自产在线| 疯狂撞击丝袜人妻| 久久久xxx| 国产亚洲二区| 大片免费在线观看| 日本乱码高清不卡字幕| 国产乱国产乱老熟300部视频| 精品freesex老太交| 高清欧美性猛交xxxx| 91丨九色丨蝌蚪丨对白| 久久久777精品电影网影网| 免费一级淫片aaa片毛片a级| 九七影院97影院理论片久久| 亚洲嫩模很污视频| 五月婷婷开心网| 丁香激情综合五月| 久久久久久久久影视| 成人精品国产亚洲| 亚洲欧美国产视频| 啦啦啦免费高清视频在线观看| 国产乱一区二区| 一区二区三区四区| 91亚洲精品| 伊人久久久久久久久久久| 日韩网红少妇无码视频香港| 成人综合婷婷国产精品久久免费| 日韩视频在线免费播放| 日韩专区视频网站| www高清在线视频日韩欧美| 成人黄色免费网| 中文字幕欧美日韩一区| 国产偷人视频免费| 欧美日韩一区二区三区不卡视频| 高清欧美性猛交xxxx黑人猛交| 亚洲成人久久精品| 亚洲午夜久久久久| av av在线| 亚洲久久一区| 国产在线精品一区二区三区| 国产白丝在线观看| 亚洲黄色av网站| 久久国产视频播放| 92精品国产成人观看免费| 国产视频九色蝌蚪| 国产成人一区| 国产精品网址在线| 免费黄色电影在线观看| 欧美一级淫片007| 久久久久久久福利| thepron国产精品| 97xxxxx| 精品国产aⅴ| 国产欧美日韩中文| av观看在线| 精品日韩在线观看| 日韩乱码人妻无码中文字幕| 91网站在线播放| 看欧美ab黄色大片视频免费| 日韩成人综合| 91丨九色丨国产| rebdb初裸写真在线观看| 国产婷婷成人久久av免费高清 | 天堂精品中文字幕在线| 亚洲成人在线视频网站| 精品一区视频| 4k岛国日韩精品**专区| 1024视频在线| 日韩欧美卡一卡二| 色网站在线播放| 亚洲国产精品ⅴa在线观看| 亚洲涩涩在线观看| 在线成人www免费观看视频| 免费电影一区| 香蕉久久一区| 91国语精品自产拍在线观看性色 | 蜜桃久久久久| 国产mv久久久| av网址在线| 日韩高清免费在线| 中文字幕在线网站| 亚洲一区av在线| 中文字幕免费高清| 国产精品12区| 天天操,天天操| 伊人狠狠色j香婷婷综合| 天堂社区 天堂综合网 天堂资源最新版| 国产精品麻豆| 日本国产精品视频| 色婷婷av在线| 中文字幕不卡av| 乱精品一区字幕二区| 欧美在线|欧美| 久久久久久久久97| 国产精品女上位| 欧美xxxxx精品| 精品在线一区二区三区| 无码人妻丰满熟妇区96| 99精品小视频| 欧美日韩免费观看一区| jizz性欧美23| 国产日韩在线视频| 成人爽a毛片免费啪啪| 欧美黄色性视频| 黄页视频在线播放| 亚洲香蕉av在线一区二区三区| 亚洲成人中文字幕在线| 91麻豆精品国产综合久久久久久 | 日韩视频精品在线观看| 大桥未久一区二区| 手机在线电影一区| 欧美日韩一区二区三| 国产一区在线电影| 999视频在线免费观看| 日韩久久一区| 国产精品久久久久999| 牛牛精品一区二区| 久久免费视频这里只有精品| 亚洲91av| 久久av.com| 日本在线免费播放| 在线视频欧美性高潮| 欧美成人免费| 亚洲美女性生活视频| 五月天激情婷婷| 精品久久久网站| 亚洲精品一级片| 日韩女优视频免费观看| 99精品在线视频观看| 欧美电影一区二区| 一本色道久久综合熟妇| 欧美曰成人黄网| 中文字幕av片| 在线观看区一区二| 免费av中文字幕| 在线观看亚洲成人| 波多野结衣一二区| 欧洲中文字幕精品| 中文字幕在线播放不卡| 欧美日韩一区小说| 97超碰人人草| 制服丝袜亚洲网站| 国产福利第一视频| 日韩一区二区电影| 国产18精品乱码免费看| 精品国免费一区二区三区| 内射后入在线观看一区| 日韩av网站电影| 国产视频三级在线观看播放| 这里只有精品视频在线| 麻豆av在线导航| 欧美成人激情在线| 岛国在线视频网站| 欧美综合在线观看| 成人全视频免费观看在线看| 91精品视频网站| 无码国模国产在线观看| 久久国产主播精品| 精品免费视频| 国产成人免费高清视频| 亚洲特色特黄| 黄色一级片播放| 蜜臀精品久久久久久蜜臀 | av男人天堂一区| 蜜桃无码一区二区三区| 国产精品美女久久久久久久网站| 全网免费在线播放视频入口| 亚洲国产美国国产综合一区二区| 精品免费囯产一区二区三区 | 色哟哟中文字幕| 国产一区二区三区视频免费| 免费av网站在线看| 亚州av一区二区| 亚洲一区二区三区四区| 99视频免费观看蜜桃视频| 网红女主播少妇精品视频| 亚洲精品成人a8198a| 国内精品久久久久久久97牛牛| 日韩精品视频久久| 精品在线观看视频| 日本一卡二卡在线| 国产精品女主播在线观看| 日本在线免费观看| 欧美日韩精品免费| 天堂成人在线观看| 久久精品成人欧美大片古装| 亚洲v.com| 亚洲专区在线视频| 久草成人资源| 日本a在线免费观看| 久久99精品一区二区三区 | 国产精品国产a| 日韩免费不卡视频| 777久久久精品| 蜜桃免费在线| 欧美激情视频一区二区| 欧美高清你懂的| 欧美日韩亚洲在线| 亚洲最黄网站| 免费观看黄网站| 欧美国产日韩精品免费观看| 国产无套在线观看| 91精品蜜臀在线一区尤物| 久草在现在线| 97视频在线观看视频免费视频| 91精品国产色综合久久不卡粉嫩| 欧美亚洲另类在线一区二区三区 | 香蕉视频网站入口| 9色porny自拍视频一区二区| 久久久久久视频| 欧美视频你懂的| 精品资源在线看| 欧美性受xxx| 国产精品黄网站| 韩国无码av片在线观看网站| 久久精品国产一区二区| 久久亚洲AV无码专区成人国产| 无吗不卡中文字幕| 亚洲精品久久久久avwww潮水| 久久精品中文字幕免费mv| 国产麻豆一区| 先锋影音一区二区三区| 天堂成人免费av电影一区| www.久久av| 懂色av一区二区三区| www.午夜激情| 久久99精品久久久久久琪琪| 精品欧美视频| 老司机午夜网站| 国产黄人亚洲片| 国产盗摄x88av| 日韩欧美激情四射| 色www永久免费视频首页在线| 亚洲尤物视频网| 午夜精品婷婷| jjzz黄色片| 亚洲成在人线免费| 色噜噜一区二区三区| 97热精品视频官网| 日韩大片在线免费观看| 97在线播放视频| 久久久久久久久97黄色工厂| 波多野结衣一本一道| 日韩最新av在线| 亚洲一区二区av| 日韩一二区视频| 国产**成人网毛片九色 | 视频一区三区| 日本视频免费一区| 国产精品suv一区二区88| 欧美高清视频不卡网| 色女人在线视频| 久久国产精品久久| 日日骚欧美日韩| 老司机成人免费视频| 欧美日韩不卡一区二区| 午夜av在线免费观看| 精品亚洲第一| 奇米色一区二区| 美女的奶胸大爽爽大片| 亚洲国产精品字幕| 123成人网| 亚洲精品国产综合久久| 91手机视频在线观看| 懂色av一区二区| 久久久久久久久久久免费视频| 国产女主播视频一区二区| 中文字幕福利视频| 欧美成人一区在线| 日韩有码中文字幕在线| 色综合色综合色综合色综合| 亚洲精品乱码久久久久久| 外国精品视频在线观看 | 伊人再见免费在线观看高清版| 成人免费视频免费观看| caoporn国产| 久久综合伊人77777蜜臀| 看全色黄大色大片免费久久久| 一级黄色香蕉视频| 亚洲夂夂婷婷色拍ww47| 污色网站在线观看| 久久精品欧美一区二区三区不卡| 国产又粗又猛视频| 91精品国产91久久久久久最新 | 不卡av电影在线观看| 国产精品极品| 九九九九九九九九| 欧美日韩中文字幕日韩欧美| 国产最新在线| 秋霞毛片久久久久久久久| 国产成人三级在线观看| 在线观看毛片视频| 91国产高清在线| 在线观看国产精品入口| 亚洲AV无码片久久精品| 日韩精品一区二区在线|