最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot整合SSE接口實現(xiàn)實時數(shù)據(jù)推送

 更新時間:2025年05月27日 10:52:33   作者:洛可可白  
SSEServer-Sent?Events)是一種基于HTTP的服務(wù)器向客戶端單向?qū)崟r推送數(shù)據(jù)的技術(shù),本文主要介紹了SpringBoot整合SSE接口實現(xiàn)實時數(shù)據(jù)推送的方法,需要的可以參考下

一、什么是SSE

SSE(Server-Sent Events) 是一種基于HTTP的服務(wù)器向客戶端單向?qū)崟r推送數(shù)據(jù)的技術(shù)。與WebSocket不同,SSE天然支持?jǐn)嗑€重連,且協(xié)議簡單,適用于股票行情、實時日志、消息通知等場景。

二、項目環(huán)境準(zhǔn)備

1. 基礎(chǔ)依賴

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<!-- 若使用WebFlux方式 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-webflux</artifactId>
</dependency>

三、兩種實現(xiàn)方式對比

特性傳統(tǒng)Servlet方式WebFlux響應(yīng)式方式
線程模型阻塞IO(線程池)非阻塞IO(事件循環(huán))
資源消耗較高較低
代碼復(fù)雜度需手動管理線程聲明式編程
適用場景簡單低頻場景高并發(fā)實時場景

四、傳統(tǒng)Servlet實現(xiàn)(基于SseEmitter)

1. 控制器實現(xiàn)

@RestController
public class SseController {

    @GetMapping("/sse")
    public SseEmitter handleSse() {
        SseEmitter emitter = new SseEmitter();
        ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();

        Runnable task = () -> {
            try {
                String data = "Time: " + LocalDateTime.now();
                emitter.send(
                    SseEmitter.event()
                        .data(data)
                        .id(String.valueOf(System.currentTimeMillis()))
                );
            } catch (IOException e) {
                emitter.completeWithError(e);
                executor.shutdown();
            }
        };

        // 定時發(fā)送(立即執(zhí)行,每秒一次)
        executor.scheduleAtFixedRate(task, 0, 1, TimeUnit.SECONDS);

        // 客戶端斷開處理
        emitter.onCompletion(executor::shutdown);
        emitter.onTimeout(executor::shutdown);

        return emitter;
    }
}

2. 關(guān)鍵點解析

SseEmitter:核心類,保持長連接

ScheduledExecutorService:定時任務(wù)線程池

事件結(jié)構(gòu):支持設(shè)置id/event/data等字段

資源釋放:通過onCompletion/onTimeout確保線程池關(guān)閉

五、響應(yīng)式實現(xiàn)(基于WebFlux)

1. 控制器實現(xiàn)

@RestController
public class SseWebFluxController {

    @GetMapping(value = "/sse-stream", 
               produces = MediaType.TEXT_EVENT_STREAM_VALUE)
    public Flux<ServerSentEvent<String>> streamEvents() {
        return Flux.interval(Duration.ofSeconds(1))
            .map(sequence -> ServerSentEvent.<String>builder()
                .id(String.valueOf(sequence))
                .event("time-update")
                .data("SSE from WebFlux - " + LocalDateTime.now())
                .build());
    }
}

2. 核心優(yōu)勢

非阻塞IO:基于Reactor庫實現(xiàn)響應(yīng)式流

自動背壓:處理客戶端消費速度差異

簡潔API:使用Flux流式編程

六、接口測試方法

1. 使用curl測試

curl http://localhost:8080/sse
curl http://localhost:8080/sse-stream

2. 前端示例

const eventSource = new EventSource('/sse');

eventSource.onmessage = (e) => {
    console.log('Received:', e.data);
};

eventSource.addEventListener('time-update', (e) => {
    console.log('Custom event:', e.data);
});

七、生產(chǎn)環(huán)境注意事項

連接管理:設(shè)置合理的超時時間(默認(rèn)30秒)

錯誤處理:添加onError回調(diào)記錄異常

跨域配置:需要配置CORS

@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/sse*")
                .allowedOrigins("*");
    }
}

性能監(jiān)控:跟蹤活躍連接數(shù)

八、擴展應(yīng)用場景

實時股票報價推送

系統(tǒng)運行狀態(tài)監(jiān)控

聊天應(yīng)用消息通知

長耗時任務(wù)進(jìn)度更新

九、總結(jié)

兩種實現(xiàn)方式各有優(yōu)勢:

  • 傳統(tǒng)Servlet方式 適合簡單場景,快速實現(xiàn)
  • WebFlux方式 更適合高并發(fā)、低延遲需求

建議根據(jù)實際場景選擇,對于新項目推薦使用WebFlux實現(xiàn),能更好地利用系統(tǒng)資源。希望本文能幫助您快速上手SpringBoot中的SSE開發(fā)!

到此這篇關(guān)于SpringBoot整合SSE接口實現(xiàn)實時數(shù)據(jù)推送的文章就介紹到這了,更多相關(guān)SpringBoot SSE實時數(shù)據(jù)推送內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JavaWeb中Servlet的深入理解

    JavaWeb中Servlet的深入理解

    Java Servlet 是運行在 Web 服務(wù)器或應(yīng)用服務(wù)器上的程序,它是作為來自 Web 瀏覽器或其他 HTTP 客戶端的請求和 HTTP 服務(wù)器上的數(shù)據(jù)庫或應(yīng)用程序之間的中間層
    2021-10-10
  • Springboot接口項目如何使用AOP記錄日志

    Springboot接口項目如何使用AOP記錄日志

    這篇文章主要介紹了Springboot接口項目如何使用AOP記錄日志,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-06-06
  • Jmeter自定義函數(shù)base64加密實現(xiàn)過程解析

    Jmeter自定義函數(shù)base64加密實現(xiàn)過程解析

    這篇文章主要介紹了Jmeter自定義函數(shù)base64加密實現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-07-07
  • SpringCloud maven-assembly-plugin 多級目錄打包的實現(xiàn)

    SpringCloud maven-assembly-plugin 多級目錄打包的實現(xiàn)

    本文主要介紹了SpringCloud maven-assembly-plugin 多級目錄打包的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • 將字符串?dāng)?shù)字格式化為樣式1,000,000,000的方法

    將字符串?dāng)?shù)字格式化為樣式1,000,000,000的方法

    這篇文章主要介紹了將字符串?dāng)?shù)字格式化為樣式1,000,000,000的方法,有需要的朋友可以參考一下
    2014-01-01
  • 使用Spring的ApplicationEvent實現(xiàn)本地事件驅(qū)動的實現(xiàn)方法

    使用Spring的ApplicationEvent實現(xiàn)本地事件驅(qū)動的實現(xiàn)方法

    本文介紹了如何使用Spring的ApplicationEvent實現(xiàn)本地事件驅(qū)動,通過自定義事件和監(jiān)聽器,實現(xiàn)模塊之間的松耦合,提升代碼的可維護(hù)性和擴展性。同時還介紹了異步事件和事件傳遞的相關(guān)知識
    2023-04-04
  • Java防止頻繁請求、重復(fù)提交的操作代碼(后端防抖操作)

    Java防止頻繁請求、重復(fù)提交的操作代碼(后端防抖操作)

    在客戶端網(wǎng)絡(luò)慢或者服務(wù)器響應(yīng)慢時,用戶有時是會頻繁刷新頁面或重復(fù)提交表單的,這樣是會給服務(wù)器造成不小的負(fù)擔(dān)的,同時在添加數(shù)據(jù)時有可能造成不必要的麻煩,今天通過本文給大家介紹下Java防止頻繁請求、重復(fù)提交的操作代碼,一起看看吧
    2022-04-04
  • Java OpenSSL生成的RSA公私鑰進(jìn)行數(shù)據(jù)加解密詳細(xì)介紹

    Java OpenSSL生成的RSA公私鑰進(jìn)行數(shù)據(jù)加解密詳細(xì)介紹

    這篇文章主要介紹了Java OpenSSL生成的RSA公私鑰進(jìn)行數(shù)據(jù)加解密詳細(xì)介紹的相關(guān)資料,這里提供實例代碼及說明具體如何實現(xiàn),需要的朋友可以參考下
    2016-12-12
  • 一文掌握J(rèn)avaWeb登錄認(rèn)證

    一文掌握J(rèn)avaWeb登錄認(rèn)證

    登錄認(rèn)證是每個系統(tǒng)中必不可少的功能,通過用戶名和密碼來驗證用戶身份,JavaWeb中實現(xiàn)登錄認(rèn)證通常需要處理HTTP協(xié)議的無狀態(tài)性,涉及會話管理、令牌技術(shù)等,本文給大家介紹JavaWeb登錄認(rèn)證的相關(guān)知識,感興趣的朋友跟隨小編一起看看吧
    2024-09-09
  • Eclipse中Properties和yml配置文件注釋亂碼的解決

    Eclipse中Properties和yml配置文件注釋亂碼的解決

    這篇文章主要介紹了Eclipse中Properties和yml配置文件注釋亂碼的解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10

最新評論

临颍县| 从江县| 宁陕县| 林西县| 连城县| 龙山县| 甘南县| 惠安县| 尉氏县| 甘谷县| 永清县| 广丰县| 温泉县| 丹寨县| 泸定县| 茶陵县| 建宁县| 秀山| 定日县| 武强县| 义马市| 明光市| 呈贡县| 合作市| 乌审旗| 金湖县| 龙海市| 察哈| 佛冈县| 甘泉县| 循化| 长葛市| 揭东县| 枣阳市| 曲麻莱县| 栾川县| 静安区| 河东区| 嘉鱼县| 衢州市| 西乌珠穆沁旗|