精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

丰满少妇在线观看| 国产精品久久久久久久天堂第1集 国产精品久久久久久久免费大片 国产精品久久久久久久久婷婷 | 欧美影院在线播放| 在线免费观看麻豆| 香蕉成人在线| 亚洲va在线va天堂| 色综合久久av| 国产 日韩 欧美 综合| 美女网站久久| 欧美激情在线观看视频| 摸摸摸bbb毛毛毛片| 精品中文字幕一区二区三区四区| 懂色av影视一区二区三区| 亚洲日本一区二区三区在线不卡| 亚洲国产精品久久久久爰性色| 久久精品男女| 高清一区二区三区日本久| 国产亚洲精品精品精品| 国产一区二区三区亚洲| 欧美日韩成人在线| 三上悠亚久久精品| 国产不卡在线| 国产亚洲欧美色| 国产精品亚洲不卡a| 波多野结衣黄色网址| 激情综合中文娱乐网| 一区二区三欧美| 日本少妇xxxx| 日韩在线精品强乱中文字幕| 欧美日韩综合不卡| 男人的天堂99| 狠狠操一区二区三区| 亚洲免费观看高清完整版在线观看熊 | 久久综合伊人77777尤物| 日本黄色特级片| 福利在线一区| 精品日韩在线一区| 激情成人在线观看| 国产精品第一国产精品| 色婷婷av一区二区三区软件 | 欧美日韩亚洲免费| 天堂在线资源库| 国产91丝袜在线播放0| 国产精品女主播| 国产免费一级视频| 欧美亚洲一级| 亲子乱一区二区三区电影 | 激情在线小视频| 国产精品理论片| 日韩av电影免费播放| 神马亚洲视频| 久久蜜桃av一区二区天堂| 国产精品福利视频| 国模人体一区二区| 波多野洁衣一区| 国产欧美一区二区视频| 高清国产mv在线观看| 国产成人精品免费在线| 99免费在线视频观看| 精品人妻无码一区二区三区蜜桃一| 国内国产精品久久| 91蜜桃网站免费观看| www久久久com| 成人激情小说网站| 欧美国产综合视频| 9色在线视频| 亚洲欧美综合另类在线卡通| 一二三四中文字幕| 爱啪视频在线观看视频免费| 精品日韩中文字幕| 欧美在线观看视频网站| www.成人在线视频| 制服丝袜一区二区三区| 国产老头和老头xxxx×| 高清一区二区三区| 亚洲视频在线看| 日韩欧美视频免费观看| 一级毛片免费高清中文字幕久久网| 免费不卡欧美自拍视频| 久久国产精品波多野结衣av| 亚洲国产精品一区| 国产精品99导航| av资源免费看| 91丨porny丨蝌蚪视频| 日韩国产在线一区| 大片免费在线观看| 午夜国产精品一区| 天堂av在线网站| 香港久久久电影| 日韩精品欧美激情| 亚洲性猛交xxxx乱大交| 欧美一区国产在线| 欧美资源在线观看| 91麻豆视频在线观看| 成人一区二区三区中文字幕| 日本不卡一区二区三区在线观看| 毛片av在线| 欧美日韩免费一区| 乌克兰美女av| 国产精品白丝一区二区三区| 中文字幕日韩视频| 日韩欧美不卡视频| 久久精品99国产国产精| 国产视频一区二区不卡| 日本视频在线免费观看| 精品美女久久久久久免费| 亚洲欧洲日本精品| 欧美日韩大片免费观看| 久久亚洲精品一区| 无码任你躁久久久久久久| 国产成人一级电影| 亚洲精品色图| 欧美精品v国产精品v日韩精品 | 美女一区二区久久| 国产精品一区在线观看| av福利在线播放| 午夜精品久久久久| 日本高清免费在线视频| 国产区精品区| 亚洲18私人小影院| 亚洲国产中文字幕在线| 中文字幕日本不卡| www.超碰com| 色先锋久久影院av| 久久久久亚洲精品成人网小说| 91国产免费视频| 国产亚洲精品精华液| 玩弄中年熟妇正在播放| 亚洲精品一区二区三区在线| 日韩在线中文视频| 黄色一区二区视频| 95精品视频在线| 免费看毛片的网址| 亚洲大奶少妇| 欧美成在线视频| 国产熟女一区二区三区五月婷 | 欧美爱爱小视频| 国模少妇一区二区三区| 亚洲一区二区三区在线观看视频 | 欧洲一区在线电影| 亚洲观看黄色网| 99日韩精品| 国产精品一区二区免费| 日本三级在线观看网站| 91精品在线一区二区| 久久99久久99精品免费看小说| 蜜臀va亚洲va欧美va天堂| 欧美动漫一区二区| 综合另类专区| 亚洲品质视频自拍网| 国产精品久久久久久久久久久久久久久久久 | 国产一区二区免费看| 国产又大又长又粗又黄| 成人影院网站ww555久久精品| 精品国产一区av| 国产精品亚洲lv粉色| 亚洲欧洲制服丝袜| 精产国品一区二区三区| 欧美涩涩视频| 国产亚洲欧美另类一区二区三区| cao在线视频| 日韩久久精品电影| 销魂美女一区二区| 中文字幕中文乱码欧美一区二区| 在线播放免费视频| 国产精品v日韩精品v欧美精品网站 | 久久99精品久久久久久青青91| 精品国产av 无码一区二区三区| 亚洲免费在线观看视频| 性欧美18—19sex性高清| 国产欧美另类| 亚洲 国产 欧美一区| 图片一区二区| 韩国美女主播一区| 国产香蕉视频在线看| 91麻豆精品国产| 色播视频在线播放| 中文字幕高清不卡| 久久久久久无码精品人妻一区二区| 亚洲小说欧美另类婷婷| 欧美日韩精品久久久免费观看| 国产麻豆一区| 欧美激情视频一区二区三区不卡| 青春草在线观看 | 亚洲精品成人少妇| avtt香蕉久久| 国产一区二区三区在线看麻豆| 国产精品久久..4399| 精品美女视频| 国产精品国产精品| 国产极品嫩模在线观看91精品| 欧美日韩xxx| 免费黄网站在线观看| 91麻豆精品国产| 无码人妻精品一区二区蜜桃色欲 | 日本xxx免费| 综合色就爱涩涩涩综合婷婷| 91久久久久久久久| 中文不卡1区2区3区| 久久中文字幕在线| 男人天堂网在线观看| 欧美一区二区三区视频| 91黑人精品一区二区三区| 一区二区在线免费| 日韩不卡av在线| 91一区二区三区在线观看| 久久久久久久久久毛片| 久久精品道一区二区三区| 日韩一级片一区二区| 日韩av久操| 老司机精品福利在线观看| 秋霞一区二区| 成人自拍性视频| 天然素人一区二区视频| 久久久之久亚州精品露出| 日本电影在线观看网站| 亚洲免费一在线| 神宫寺奈绪一区二区三区| 欧美一区二区视频网站| 波多野结衣电影在线播放| 精品久久久久国产| 久久精品国产亚洲av高清色欲 | 日韩专区视频网站| 国产aaa精品| 僵尸再翻生在线观看免费国语| 不卡av在线播放| 日本激情在线观看| 在线观看国产成人av片| 欧美成人免费| 日韩毛片中文字幕| 天天操天天干天天舔| 欧美成人欧美edvon| 国产美女精品视频国产| 欧美日韩午夜精品| 免费在线不卡av| 色狠狠桃花综合| 亚洲国产成人精品女人久久| 欧美日韩性视频在线| 天海翼一区二区| 亚洲成人综合网站| 懂色av.com| 亚洲成av人片在线观看无码| 成人免费看片98| 亚洲国产日韩一级| 日本熟妇成熟毛茸茸| 亚洲国产视频a| 日韩三级视频在线| 婷婷国产在线综合| 天天操天天干视频| 欧美日韩中文字幕在线| 国产91精品一区| 色综合咪咪久久| 中文字幕乱码视频| 欧美人动与zoxxxx乱| 91丨porny丨在线中文 | 裤袜国产欧美精品一区| 日本国产一区二区三区| 欧美黄色三级| 国产精品夜色7777狼人| 91麻豆精品国产综合久久久| 91久久久在线| 红杏视频成人| 久久久精彩视频| 成人精品中文字幕| 一区二区三区四区久久| 你懂的国产精品永久在线| www.18av.com| 亚洲永久字幕| 香港日本韩国三级网站| 国产呦萝稀缺另类资源| 2018国产精品| 久久久综合精品| 久久午夜精品视频| 一区二区在线看| 丰满人妻老熟妇伦人精品| 精品视频999| 亚洲精品国产精| 亚洲欧美日韩精品久久亚洲区 | 欧美精品福利视频| 色偷偷色偷偷色偷偷在线视频| 日韩av电影在线播放| 自拍偷拍亚洲| 久久草.com| 天天做天天爱天天综合网2021| 成人区一区二区| 日韩精品免费视频人成| 日日夜夜精品视频免费观看| 成人精品视频一区| 亚洲激情图片网| 午夜免费久久看| 亚洲自拍偷拍另类| 亚洲国产成人爱av在线播放| 都市激情一区| 高清欧美性猛交| 伊人国产精品| 欧美一卡2卡3卡4卡无卡免费观看水多多| 91亚洲成人| 久久久精品在线视频| 国产麻豆一精品一av一免费| 中文字幕丰满孑伦无码专区| 亚洲欧美日韩国产另类专区| 可以免费看的av毛片| 欧美一区二区三区精品| 国自产拍在线网站网址视频| 色综合久久悠悠| 精品久久在线| 久久国产精品一区二区三区| 亚洲一区二区日韩| 熟女少妇精品一区二区| 成人精品免费网站| 欧美高清视频一区二区三区| 91久久精品国产91性色tv| 黄色av小说在线观看| 精品国产一区二区三区久久久| 天堂av中文在线观看| 岛国视频一区免费观看| 婷婷亚洲图片| 在线看的黄色网址| 久久婷婷久久一区二区三区| 日本在线视频中文字幕| 日韩你懂的电影在线观看| 亚洲视频tv| 国产精品大陆在线观看| 日本成人a网站| 免费在线观看视频a| 国产成人aaaa| 亚洲av无码一区二区三区在线| 欧美熟乱第一页| 番号集在线观看| 国产99视频在线观看| 视频一区在线观看| www国产精品内射老熟女| av一区二区三区黑人| 国产精品成人久久| 亚洲精品一区二区三区在线观看 | 日韩av第一页| 亚洲免费观看高清完整版在线观| 男人的天堂狠狠干| 成人国产精品免费观看| 国产精品日日夜夜| 欧美成人r级一区二区三区| 午夜av在线播放| 肥熟一91porny丨九色丨| 欧美日韩三级电影在线| 人人爽人人爽av| 亚洲女同女同女同女同女同69| 97在线视频人妻无码| 久久精品视频网站| 韩国三级成人在线| 日韩精品第1页| 国产成人免费视频| 国产在线成人精品午夜| 亚洲精品www久久久久久广东| 7777kkk亚洲综合欧美网站| 精品国产一区二区三区麻豆免费观看完整版 | 久久精品国产电影| 999精品嫩草久久久久久99| 亚洲欧美一二三| 成人在线视频一区二区| 国产性xxxx高清| 伊人久久大香线蕉av一区二区| 成人精品国产| 国产资源第一页| av日韩在线网站| 无码视频一区二区三区| 日韩一区二区三区国产| 亚洲欧美日本国产| 无罩大乳的熟妇正在播放| 国产午夜精品一区二区三区嫩草| 亚洲资源在线播放| 欧美激情精品久久久久久久变态| 啪啪激情综合网| 奇米影音第四色| 亚洲欧美色图小说| 人妻妺妺窝人体色www聚色窝| 庆余年2免费日韩剧观看大牛| 日韩国产欧美一区二区| 亚洲av无一区二区三区久久| 日韩欧美一区二区在线| 日本在线观看www| 国产乱码精品一区二区三区卡 | 在线观看国产免费视频| 在线免费观看视频一区| а√天堂8资源在线官网| 精品国产免费人成电影在线观... 精品国产免费久久久久久尖叫 | 久久亚州av| 免费一级特黄录像| 亚洲综合在线五月| 国产在线电影| 国产精品果冻传媒潘| 麻豆91在线播放免费| 国产精品99精品| 色哟哟入口国产精品| 国产女人18毛片水真多18精品| 国产三级三级三级看三级| 一区二区免费看| 91在线播放网站| 麻豆久久久9性大片| 国产成人鲁色资源国产91色综| 欧美日韩 一区二区三区|