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

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

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

一、什么是SSE

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

二、項(xiàng)目環(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>

三、兩種實(shí)現(xiàn)方式對(duì)比

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

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

1. 控制器實(shí)現(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();
            }
        };

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

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

        return emitter;
    }
}

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

SseEmitter:核心類(lèi),保持長(zhǎng)連接

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

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

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

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

1. 控制器實(shí)現(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)勢(shì)

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

自動(dòng)背壓:處理客戶端消費(fèi)速度差異

簡(jiǎn)潔API:使用Flux流式編程

六、接口測(cè)試方法

1. 使用curl測(cè)試

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)境注意事項(xiàng)

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

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

跨域配置:需要配置CORS

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

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

八、擴(kuò)展應(yīng)用場(chǎng)景

實(shí)時(shí)股票報(bào)價(jià)推送

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

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

長(zhǎng)耗時(shí)任務(wù)進(jìn)度更新

九、總結(jié)

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

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

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

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

相關(guān)文章

  • JavaWeb中Servlet的深入理解

    JavaWeb中Servlet的深入理解

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

    Springboot接口項(xiàng)目如何使用AOP記錄日志

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

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

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

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

    本文主要介紹了SpringCloud maven-assembly-plugin 多級(jí)目錄打包的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    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實(shí)現(xiàn)本地事件驅(qū)動(dòng)的實(shí)現(xiàn)方法

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

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

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

    在客戶端網(wǎng)絡(luò)慢或者服務(wù)器響應(yīng)慢時(shí),用戶有時(shí)是會(huì)頻繁刷新頁(yè)面或重復(fù)提交表單的,這樣是會(huì)給服務(wù)器造成不小的負(fù)擔(dān)的,同時(shí)在添加數(shù)據(jù)時(shí)有可能造成不必要的麻煩,今天通過(guò)本文給大家介紹下Java防止頻繁請(qǐng)求、重復(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)資料,這里提供實(shí)例代碼及說(shuō)明具體如何實(shí)現(xiàn),需要的朋友可以參考下
    2016-12-12
  • 一文掌握J(rèn)avaWeb登錄認(rèn)證

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

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

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

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

最新評(píng)論

通城县| SHOW| 扎兰屯市| 延津县| 安阳市| 莱芜市| 盐亭县| 芜湖县| 万盛区| 朝阳市| 株洲市| 长兴县| 贡嘎县| 岫岩| 江都市| 博白县| 治多县| 长寿区| 怀仁县| 万荣县| 南昌市| 青田县| 尼玛县| 庆阳市| 集安市| 中阳县| 松桃| 顺义区| 肃南| 图片| 霸州市| 吉木萨尔县| 水富县| 定结县| 台中市| 堆龙德庆县| 德保县| 中阳县| 重庆市| 马龙县| 望奎县|