SSE事件流簡單示例

文章目錄

  • 1、推送-SseEmitter
  • 2、接收-EventSourceListener

SSE(Server-Sent Events,服務器推送事件)是一種基于HTTP的服務器向客戶端實時推送數據的技術標準。

1、推送-SseEmitter

SseEmitter用于實現服務器向客戶端單向長連接的實時數據推送。
比如用于大模型機器人回答推送給前端(逐字逐詞顯示)

作為服務端,使用.send()方法發送數據,.complete()方法完成并結束連接,簡單示例:

import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;@GetMapping("/test")
public SseEmitter test() {SseEmitter emitter = new SseEmitter(30_000L); // 超時時間設為30秒ExecutorService executor = Executors.newSingleThreadExecutor();// 模擬異步數據推送executor.execute(() -> {try {for (int i = 0; i < 10; i++) {emitter.send("Event " + i); // 發送數據Thread.sleep(1000);}emitter.complete(); // 正常結束} catch (Exception e) {emitter.completeWithError(e); // 異常終止}});return emitter;
}

2、接收-EventSourceListener

可以使用js接收sse事件流,當然如果是后端接口,也可以用java接收,使用EventSourceListener處理從服務器端通過 SSE(Server-Sent Events)推送的事件流。
在EventSourceListener中覆寫onEvent方法,onEvent方法在每次服務器推送新事件時調用;

import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import okhttp3.sse.EventSource;
import okhttp3.sse.EventSourceListener;
import okhttp3.sse.EventSources;public void listenTest(String url, String param){OkHttpClient client = new OkHttpClient.Builder().connectTimeout(5, TimeUnit.MINUTES).readTimeout(5, TimeUnit.MINUTES).build();RequestBody formBody = RequestBody.create(okhttp3.MediaType.parse("application/json; charset=utf-8"), param);Request request = new Request.Builder().post(formBody).url(url).build();EventSourceListener listener = new EventSourceListener() {// 連接建立時觸發,非必須@Overridepublic void onOpen(EventSource eventSource, Response response) {System.out.println("SSE連接已建立");System.out.println("響應頭: " + response.headers());}// 收到消息時觸發@Overridepublic void onEvent(EventSource eventSource, String id, String type, String data) {//在這里對推送過來的數據做解析和處理System.out.printf("收到事件: id=%s, type=%s, data=%s\n", id, type, data);}// 連接關閉時觸發@Overridepublic void onClosed(EventSource eventSource) {System.out.println("SSE連接已關閉");}// 發生錯誤時觸發(包括網絡錯誤和協議錯誤)@Overridepublic void onFailure(EventSource eventSource, Throwable t, Response response) {System.err.println("SSE錯誤: " + t.getMessage());if (response != null) {System.err.println("錯誤響應碼: " + response.code());}eventSource.cancel();//關閉連接}}EventSource.Factory factory = EventSources.createFactory(client);factory.newEventSource(request, listener);
}

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

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

相關文章

Elasticsearch RESTful API入門:基礎搜索與查詢DSL

Elasticsearch RESTful API入門&#xff1a;基礎搜索與查詢DSL 本文為Elasticsearch初學者詳細解析RESTful API的核心操作與查詢DSL語法&#xff0c;包含大量實戰示例及最佳實踐。 一、Elasticsearch與RESTful API簡介 Elasticsearch&#xff08;ES&#xff09;作為分布式搜索…

(六)復習(OutBox Message)

文章目錄 項目地址一、OutBox Message1.1 OutBox表配置1. OutBoxMessage類2. OutboxMessage表配置3. 給每個模塊生成outboxmessage表1.2 發布OutBox Message1. 修改Intercepotor2. 配置Quartz3. 創建Quatz方法發布領域事件4. 創建Quatz定時任務5. 注冊Quatz服務和配置6. 流程梳…

STM32-ADC內部溫度

在通道16無引腳&#xff08;測量溫度不準確&#xff09;跟ADC代碼差不多&#xff1b;不需要使能引腳時鐘&#xff1b;將內部溫度測量打開/*** brief 啟用或禁用溫度傳感器和內部參考電壓功能* param NewState: 新的功能狀態&#xff0c;取值為ENABLE或DISABLE* retval 無* no…

「Linux命令基礎」文本模式系統關閉與重啟

關機重啟基本命令 直接拔掉計算機電源可能損壞內部元件;Linux系統通過命令關閉計算機則是安全流程,讓所有程序有機會保存數據、釋放資源。 關機命令:shutdown Linux系統提供了多種用于關閉或重啟系統的命令,其中 shutdown 是最常用的一種,它可以安全地通知用戶系統即將…

射頻信號(大寬高比)時頻圖目標檢測anchors配置

一、大寬高比目標YOLO檢測參數設置 這是yolov7的一個label的txt文件&#xff1a; 1 0.500 0.201 1.000 0.091 2 0.500 0.402 1.000 0.150 3 0.500 0.604 1.000 0.093 0 0.500 0.804 1.000 0.217 對應的樣本&#xff1a; 長寬比分別是&#xff1a;1/0.09110.98, 1/0.1506.67…

OpenStack 鑒權服務介紹.md

引言 OpenStack是一個開源的云計算管理平臺&#xff0c;其中的Keystone組件承擔了身份認證和授權的關鍵任務。Keystone的主要功能包括管理用戶及其權限、維護OpenStack Services的Endpoint&#xff0c;以及實現認證&#xff08;Authentication&#xff09;和鑒權&#xff08;Au…

Linux_3:進程間通信

IPC1.什么是IPC&#xff1f;Inter Process Communication2.進程間通信常用的幾種方式1&#xff0c;管道通信&#xff1a;有名管道&#xff0c;無名管道2&#xff0c;信號- 系統開銷小3&#xff0c;消息隊列-內核的鏈表4&#xff0c;信號量-計數器5&#xff0c;共享內存6&#x…

【Springboot】Bean解釋

在 Spring Boot 中&#xff0c;Bean 就像是你餐廳里的一名員工。比如&#xff0c;你有一名服務員&#xff08;Service&#xff09;、一名廚師&#xff08;Chef&#xff09;和一名收銀員&#xff08;Cashier&#xff09;。這些員工都是餐廳正常運轉所必需的&#xff0c;他們各自…

axios的post請求,數據為什么要用qs處理?什么時候不用?

為什么使用 qs 處理 POST 數據axios 的 POST 請求默認將 JavaScript 對象序列化為 JSON 格式&#xff08;Content-Type: application/json&#xff09;。但某些后端接口&#xff08;尤其是傳統表單提交&#xff09;要求數據以 application/x-www-form-urlencoded 格式傳輸&…

【unitrix】 4.21 類型級二進制數基本結構體(types.rs)

一、源碼 這段代碼定義了一個類型級數值系統的 Rust 實現&#xff0c;主要用于在編譯時表示和操作各種數值類型。 use crate::sealed::Sealed; use crate::number::{NonZero, TypedInt, Unsigned, Primitive}; // // 特殊浮點值枚舉 ///// 特殊浮點值&#xff08;NaN/∞&#x…

UI前端與數字孿生結合實踐案例:智慧零售的庫存管理優化系統

hello寶子們...我們是艾斯視覺擅長ui設計和前端數字孿生、大數據、三維建模、三維動畫10年經驗!希望我的分享能幫助到您!如需幫助可以評論關注私信我們一起探討!致敬感謝感恩!一、引言&#xff1a;數字孿生重構零售庫存的 “人 - 貨 - 場” 協同在零售行業利潤率持續承壓的背景…

【Freertos實戰】零基礎制作基于stm32的物聯網溫濕度檢測(教程非常簡易)持續更新中.........

本次記錄采用Freertos的第二個DIY作品&#xff0c;基于Onenet的物聯網溫濕度檢測系統&#xff0c;此次代碼依然是全部開源。通過網盤分享的文件&#xff1a;物聯網溫濕度檢測.rar 鏈接: https://pan.baidu.com/s/1uj9UURVtGE6ZB6OsL2W8lw?pwdqm2e 提取碼: qm2e 大家也可以看看…

Matplotlib-多圖布局與網格顯示

Matplotlib-多圖布局與網格顯示一、多圖布局的核心組件二、基礎布局&#xff1a;plt.subplots()快速創建網格1. 均等分網格2. 不等分網格&#xff08;指定比例&#xff09;三、進階布局&#xff1a;GridSpec實現復雜嵌套1. 跨行列布局2. 嵌套GridSpec四、實用技巧&#xff1a;布…

GitHub上優秀的開源播放器項目介紹及優劣對比

ExoPlayer 項目地址:https://github.com/google/ExoPlayer 特點: 由Google開發,支持廣泛的視頻格式和流媒體傳輸協議,如DASH、HLS、SmoothStreaming。 提供靈活的媒體源架構和高級特性,如動態自適應流播放。 開發者可以輕松擴展和定制播放器組件,適應特定需求。 優點: 功…

react打包發到線上報錯Minified React error #130

開發過程中遇到一個問題&#xff0c;記錄一下 本地打包發布正常&#xff0c;發測試環境正常&#xff0c;可是通過Jenkins打包發布線上報錯 報錯信息 index-67fbbd81.js:39 Error: Minified React error #130; visit https://reactjs.org/docs/error-decoder.html?invariant130…

微服務項目遠程調用時的負載均衡是如何實現的?

負載均衡概述 負載均衡是微服務架構中的核心組件&#xff0c;用于將請求合理分配到多個服務實例上&#xff0c;提高系統的可用性和性能。負載均衡的分類 負載均衡大致可以分為兩類 1. 服務端負載均衡 實現位置&#xff1a;獨立部署的負載均衡服務器&#xff08;位于客戶端和服務…

【中文核心期刊推薦】中國農業科技導報

《中國農業科技導報》是中國科技核心期刊&#xff0c;也是北京大學圖書館“中文核心期刊要目總覽”收錄的期刊。它是由中國農村技術開發中心主辦&#xff0c;全面為科教興農服務的綜合性農業學術期刊。&#xfeff;《中國農業科技導報》是中國農業科學院生物技術研究所承辦的&a…

php 如何通過mysqli操作數據庫?

在PHP中&#xff0c;mysqli&#xff08;MySQL Improved Extension&#xff09;是操作MySQL數據庫的擴展庫&#xff0c;提供了面向對象和過程式兩種風格。以下是mysqli的基本操作方法&#xff1a; 1. 連接數據庫 面向對象風格 $mysqli new mysqli(localhost, username, passwor…

c/c++拷貝函數

memcpy()函數概要原型void * memcpy ( void * dest, const void * src, size_t num );功能memcpy()會復制 src 所指的內存內容的前 num 個字節到 dest所指的內存地址上&#xff08;memcpy()并不關心被復制的數據類型&#xff0c;只是逐字節地進行復制&#xff0c;這給函數的使用…

HTTP核心基礎詳解(附實戰要點)

目錄 一圖勝千言&#xff1a;HTTP核心機制圖解?編輯 一、HTTP本質&#xff1a;通信的橋梁 二、五大核心特性解析 三、HTTP頭部&#xff1a;隱藏的控制中心 四、連接管理&#xff1a;性能關鍵點 開發者必知實踐技巧 一圖勝千言&#xff1a;HTTP核心機制圖解 一、HTTP本質…