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

网站运营改进的点连云港网站搜索优化

网站运营改进的点,连云港网站搜索优化,网站建设公司主营业务,自己做的小网站如何发布Spring SseEmitter 系统详细讲解 一、SSE 基本概念(Server-Sent Events) SSE 是 HTML5 提出的标准。客户端通过 EventSource 向服务端发起 一个长连接,服务器通过该连接持续向客户端发送事件。相比 WebSocket(双向通信&#xff…

Spring SseEmitter 系统详细讲解

一、SSE 基本概念(Server-Sent Events)

  • SSE 是 HTML5 提出的标准。
  • 客户端通过 EventSource 向服务端发起 一个长连接,服务器通过该连接持续向客户端发送事件。
  • 相比 WebSocket(双向通信),SSE 是单向的:服务端 → 客户端
  • 本质上是基于 HTTP 协议的长连接

示例(前端代码)

const eventSource = new EventSource("/sse/subscribe");eventSource.onmessage = function(event) {console.log("收到消息:", event.data);
};eventSource.onerror = function(e) {console.error("连接错误", e);
};

二、Spring 的 SseEmitter 作用

Spring 提供了 SseEmitter 类来简化 SSE 的开发,它本质上是一个 Controller 的返回对象,用于不断地往前端推送数据。


三、基本用法

1. 添加依赖(Spring Boot Web 项目一般已包含)

<!-- Maven 中无需额外添加,spring-boot-starter-web 已包含 -->

2. 控制器定义 SSE 接口

@RestController
public class SseController {@GetMapping("/sse/subscribe")public SseEmitter subscribe() {SseEmitter emitter = new SseEmitter(0L); // 不超时,或设置时间,如30_000LExecutors.newSingleThreadExecutor().submit(() -> {try {for (int i = 1; i <= 5; i++) {emitter.send("第 " + i + " 条消息");Thread.sleep(1000);}emitter.complete(); // 关闭连接} catch (Exception e) {emitter.completeWithError(e);}});return emitter;}
}

四、SseEmitter 的重要方法

方法说明
send(Object data)向客户端发送消息,支持字符串、JSON 等
send(Object data, MediaType mediaType)指定 MIME 类型发送
complete()正常关闭连接
completeWithError(Throwable ex)异常关闭连接
onCompletion(Runnable callback)设置连接关闭的回调
onTimeout(Runnable callback)设置超时回调
onError(Consumer<Throwable> callback)设置错误回调
setTimeout(long timeout)设置连接超时时间(默认 30 秒)

五、注意事项

1. Content-Type

Content-Type: text/event-stream

Spring 会自动设置,只需:

@GetMapping(value = "/sse/subscribe", produces = MediaType.TEXT_EVENT_STREAM_VALUE)

2. 浏览器自动重连机制

  • 如果服务端关闭连接(未调用 .complete()),浏览器会默认自动尝试重新连接。
  • 禁止客户端重连可发送 retry: 0

3. 多用户支持

private final Map<String, SseEmitter> userEmitters = new ConcurrentHashMap<>();@GetMapping("/subscribe/{userId}")
public SseEmitter subscribe(@PathVariable String userId) {SseEmitter emitter = new SseEmitter(60_000L);userEmitters.put(userId, emitter);emitter.onCompletion(() -> userEmitters.remove(userId));emitter.onTimeout(() -> userEmitters.remove(userId));return emitter;
}public void sendToUser(String userId, String message) throws IOException {SseEmitter emitter = userEmitters.get(userId);if (emitter != null) {emitter.send(message);}
}

六、典型应用场景

  • 实时进度条
  • 实时通知系统
  • 日志推送
  • 后台任务结果反馈

七、SseEmitter 与 WebSocket 的对比

比较项SSE(SseEmitter)WebSocket
通信方向单向(服务端 → 客户端)双向
协议HTTPws:// 或 wss://
浏览器支持广泛支持广泛支持
实现复杂度简单需要管理连接
使用场景实时推送聊天、游戏等

八、SseEmitter 高级技巧

✅ 自定义事件名称

emitter.send(SseEmitter.event().name("customEvent").data("这是自定义事件")
);

前端监听:

eventSource.addEventListener("customEvent", function(event) {console.log("收到自定义事件:", event.data);
});

✅ 定时心跳保持连接

ScheduledExecutorService heartbeatScheduler = Executors.newScheduledThreadPool(1);
heartbeatScheduler.scheduleAtFixedRate(() -> {try {emitter.send("heartbeat");} catch (IOException e) {emitter.completeWithError(e);}
}, 0, 15, TimeUnit.SECONDS);

九、总结

特性支持情况
异步发送
多用户并发
超时与关闭管理
自定义事件类型
应用场景实时推送、轻量通知


文章转载自:

http://2QP0ySgy.LqLbn.cn
http://wzNETg1C.LqLbn.cn
http://2KGQdV6E.LqLbn.cn
http://Wh06uMXV.LqLbn.cn
http://2lOVZGob.LqLbn.cn
http://joPMoMBp.LqLbn.cn
http://nEgkJcyQ.LqLbn.cn
http://WJ0vn2rq.LqLbn.cn
http://eR7A5Q8G.LqLbn.cn
http://d432p3Sv.LqLbn.cn
http://ApHqyQAG.LqLbn.cn
http://2fKUefsl.LqLbn.cn
http://7zPeSAMN.LqLbn.cn
http://T1rZ9r9e.LqLbn.cn
http://hOrsMC02.LqLbn.cn
http://9rwXrwrP.LqLbn.cn
http://65Xt5dsQ.LqLbn.cn
http://3Vo5IdFv.LqLbn.cn
http://Wbt1Y3Zf.LqLbn.cn
http://EX375pzd.LqLbn.cn
http://OWpzizu9.LqLbn.cn
http://eUXGKmyr.LqLbn.cn
http://tYnU8I9P.LqLbn.cn
http://iS8R4pwl.LqLbn.cn
http://PP3siu4V.LqLbn.cn
http://3XOZ7mxE.LqLbn.cn
http://lChdSnFx.LqLbn.cn
http://9xZau1Bn.LqLbn.cn
http://qypjefGQ.LqLbn.cn
http://CPAIRA4u.LqLbn.cn
http://www.dtcms.com/wzjs/685761.html

相关文章:

  • 开网站 怎么做网上支付郑州做网站公司有哪些
  • 网站建设合同中英文wordpress 导入 微信
  • ps做网站的分辨率多少手机商城页面设计
  • 购物网站建设pptwordpress手机插件怎么用
  • 网站如何投放广告如何查询网站备案号
  • 备案ip 查询网站北京市建设监理协会网站
  • 做app需要网站吗免费申请营业执照
  • 网站建设方案对比免费名片在线设计网站
  • 公司备案可以做购物网站吗wordpress 做cms
  • 网站备案资料查询php 快速网站开发
  • 具体阐述对网站如何加强建设网页设计与制作教程书电子版
  • iis 添加网站 win7做阿里巴巴网站要多少钱
  • 大连网站流量优网站建设公司织梦模板下载
  • 中山 照明 骏域网站建设高端上海网站设计公司
  • 官方建网站哪个好中文域名 怎么做网站
  • 做月亮的网站背景图片化妆品网站栏目设计
  • 宁波招聘网站开发微信运营有前途吗
  • 宁波网站建设哪里好wordpress文章图片点击放大浏览
  • 建小公司网站在招聘网站做电话销售怎么样
  • 做设备出口网站快车app官方下载
  • 公司百度网站怎么做的做百度网站每年的费用多少合适
  • 抖音平台建站工具网站中的知识 视频从哪里来的
  • 深圳平湖网站建设公司网站的建设与维护就业方向
  • 电商网页设计网站做传销网站
  • 网站开发为什么要用框架镇平哪家网站做的好
  • 个人网站前置审批项网站会员系统怎么做模版
  • 许昌网站建设费用建立一个网站怎么做
  • 做淘宝店铺有哪些好的网站海门城乡建设管理局网站
  • 聊城房地产网站建设360浏览器主页
  • 网站页面尺寸外贸seo优化方法