当前位置: 首页 > news >正文

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.dtcms.com/a/274804.html

相关文章:

  • Paimon 写入磁盘文件名字生成机制
  • 2025年NSSCTF-青海民族大学 2025 新生赛WP
  • 学习C++、QT---20(C++的常用的4种信号与槽、自定义信号与槽的讲解)
  • 动力系统模拟与推导-AI云计算数值分析和代码验证
  • BLE低功耗设计:从广播模式到连接参数优化的全链路分析与真题解析
  • Django母婴商城项目实践(一)
  • 【JMeter】接口加密
  • 蜗轮丝杆升降机拆装图
  • 在多个DHCP服务器的网络环境中选择指定的DHCP服务
  • Windows GNU Radio避坑
  • 深入探究编程拷贝
  • mysql的性能优化:组提交、数据页复用、全表扫描优化、刷脏页
  • Vue 表单开发避坑指南:从响应式数据到动态规则的实践总结
  • Go 编译报错排查:vendor/golang.org/x/crypto/cryptobyte/asn1 no Go source files
  • Java外包怎么选?这几点不注意,项目可能血亏!
  • day21——特殊文件:XML、Properties、以及日志框架
  • Linux中geoserver中文乱码
  • 离线环境二进制安装docker
  • uniapp获取状态栏高度,胶囊按钮的高度,底部安全区域的高度,自定义导航栏
  • [实战]调频三角波和锯齿波信号生成(完整C代码)
  • hbuilderx打包的应用上传苹果应用商店最简方法
  • 字节豆包又一个新功能,超级实用,4 种玩法,你肯定用得上!(建议收藏)
  • Uniapp视频聊天软件内容监控插件开发指南
  • OA系统中的搜索功能方案:简单搜索vs高级搜索
  • 2-Git提交本地项目到远程仓库
  • 问有几条病狗?
  • 【linux网络】深入理解 TCP/UDP:从基础端口号到可靠传输机制全解析
  • 机器学习-06(Optimization-自动调整学习率)
  • consul 的安装与服务发现
  • MOSS-TTSD V2版 - 文本到语音对话生成 支持零样本多人语音克隆 一键整合包下载