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

甘肃第九建设集团公司网站中国国家培训网官网入口

甘肃第九建设集团公司网站,中国国家培训网官网入口,c#网站购物车怎么做,做移动端网站1、简述 SSE(Server-Sent Events)是一种基于HTTP协议的单向通信机制,允许服务器向浏览器持续发送实时更新。与WebSocket不同,SSE更简单,使用HTTP/1.1协议即可,不需要额外的协议升级。 SSE的特点&#xff…

1、简述

SSE(Server-Sent Events)是一种基于HTTP协议的单向通信机制,允许服务器向浏览器持续发送实时更新。与WebSocket不同,SSE更简单,使用HTTP/1.1协议即可,不需要额外的协议升级。

SSE的特点:

  • 单向通信:服务器推送数据给客户端,客户端无法向服务器发送消息。

  • 简单易用:基于HTTP协议,无需复杂的配置。

  • 浏览器支持:现代浏览器大多内置支持(如Chrome、Edge、Firefox等)。

2、Spring Boot 中的SSE实现

2.1 添加依赖

SSE无需额外的依赖,Spring Boot自带对SSE的支持。创建一个Spring Boot项目即可。

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

2.2 实现后端接口

使用MediaType.TEXT_EVENT_STREAM_VALUE作为返回类型即可开启SSE。以下代码是一个简单的实现。

package com.example.sse.controller;import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;import java.time.LocalTime;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import java.util.stream.Stream;@RestController
public class SseController {@GetMapping(value = "/sse/stream", produces = MediaType.TEXT_EVENT_STREAM_VALUE)public Stream<String> stream() {// 模拟数据流return Stream.generate(() -> "当前时间:" + LocalTime.now()).limit(10); // 限制10条消息}
}

2.3 配置超时时间(可选)

默认情况下,Spring Boot的响应会超时。可以在application.properties中调整超时时间:

server.servlet.session.timeout=30s
spring.mvc.async.request-timeout=30000

2.4 前端实现

SSE在前端通过EventSource对象实现。以下是一个简单的前端示例:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>SSE Example</title>
</head>
<body><h1>实时消息</h1><div id="messages"></div><script>const eventSource = new EventSource('/sse/stream');eventSource.onmessage = function(event) {const messagesDiv = document.getElementById('messages');const newMessage = document.createElement('p');newMessage.textContent = event.data;messagesDiv.appendChild(newMessage);};eventSource.onerror = function() {console.error('SSE连接出错,正在尝试重连...');eventSource.close();};</script>
</body>
</html>

3、高级实践

使用Spring Scheduler推送数据,在实际场景中,可能需要定时向客户端推送数据。例如,监控系统定时更新。

package com.example.sse.service;import org.springframework.http.MediaType;
import org.springframework.stereotype.Service;
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;import java.io.IOException;
import java.util.concurrent.CopyOnWriteArrayList;@Service
public class SsePushService {private final CopyOnWriteArrayList<SseEmitter> emitters = new CopyOnWriteArrayList<>();public SseEmitter subscribe() {SseEmitter emitter = new SseEmitter(30_000L);emitters.add(emitter);emitter.onCompletion(() -> emitters.remove(emitter));emitter.onTimeout(() -> emitters.remove(emitter));return emitter;}public void pushMessage(String message) {for (SseEmitter emitter : emitters) {try {emitter.send(message, MediaType.TEXT_PLAIN);} catch (IOException e) {emitters.remove(emitter);}}}
}

创建一个控制器订阅和推送消息:

package com.example.sse.controller;import com.example.sse.service.SsePushService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class SsePushController {private final SsePushService ssePushService;public SsePushController(SsePushService ssePushService) {this.ssePushService = ssePushService;}@GetMapping("/sse/subscribe")public SseEmitter subscribe() {return ssePushService.subscribe();}@GetMapping("/sse/push")public void pushMessage() {ssePushService.pushMessage("当前时间:" + System.currentTimeMillis());}
}

注意事项:

  • 浏览器兼容性:SSE不支持IE,但现代浏览器支持良好。

  • 连接断开处理:可通过EventSourceonerror事件重新连接。

  • 性能问题:对大量订阅者时,需考虑使用分布式消息队列优化(如Kafka)。

  • 超时时间:默认30秒超时,需要根据实际需求调整。

4、适用场景

  • 实时通知:如监控系统的告警推送。

  • 实时更新:如股票行情、体育比分。

  • 消息流:如系统日志、任务进度。

http://www.dtcms.com/wzjs/300262.html

相关文章:

  • 广东网页空间网站平台网络搜索引擎
  • 湖南企业竞价优化公司优化课程
  • 秦皇岛做网站的公司百度官网首页
  • 怎么用企业网站做营销淄博seo
  • 龙发装饰seo是什么意思中文
  • 成都网站排名优化网站排名软件优化
  • 医疗手机网站建设阿里指数网站
  • 济阳做网站多少钱查关键词的排名工具
  • 浙江省长兴县建设局网站石家庄新闻网头条新闻
  • 行业网站营销特点百度百家号怎么赚钱
  • 网站建设零金手指花总东莞网络推广平台
  • 怎么管理网站数据库如何进行电子商务网站推广
  • 信阳建设网站网站运营包括哪些内容
  • 北塘网站制作如何在国外推广自己的网站
  • 用什么java软件做网站灰色词首页排名接单
  • 深圳市网站建设公司好不好广州百度竞价开户
  • 青岛南丰网站建设公司网站制作培训
  • 南昌做网站的公司有哪些百度客户服务中心
  • 专注营销型网站建设公司 做网站最有效的恶意点击软件
  • 石碣镇做网站请输入搜索关键词
  • c 网站开发教程 购物网站google seo是什么
  • 建设网站用什么好处十大seo公司
  • 做分享衣服网站的初衷是什么意思宁波seo外包推广
  • 外贸网站域名被封百度网盘官网网页版
  • 轻应用网站模板郑州怎么优化网站排名靠前
  • 网站开发文档带er图推广网络推广平台
  • 企业网站手机网站建设百度搜索引擎广告投放
  • 建站平台 选择营销型网站建设解决方案
  • 开发app贵吗成都seo培训
  • 无锡百姓网免费发布信息网小红书笔记关键词排名优化