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

在北京大学生做家教的网站购物网站开发将商品导入数据库

在北京大学生做家教的网站,购物网站开发将商品导入数据库,我为群众办实事实践活动,交换友情链接的渠道有哪些以下是一个完整的基于 Spring Boot 的 Server-Sent Events (SSE) 示例,包括服务端和客户端的实现。 一、服务端实现 1. 创建 Spring Boot 项目 首先,创建一个基本的 Spring Boot 项目,并添加 spring-boot-starter-web 依赖。在 pom.xml 中…

以下是一个完整的基于 Spring Boot 的 Server-Sent Events (SSE) 示例,包括服务端和客户端的实现。

一、服务端实现

1. 创建 Spring Boot 项目

首先,创建一个基本的 Spring Boot 项目,并添加 spring-boot-starter-web 依赖。在 pom.xml 中添加以下内容:

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>
</dependencies>
2. 创建 SSE 控制器

创建一个控制器来处理 SSE 连接并推送实时消息。

SseController.java

package com.example.sse;import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;import java.io.IOException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;@RestController
public class SseController {private final ExecutorService executorService = Executors.newCachedThreadPool();@GetMapping("/sse")public SseEmitter handleSse() {SseEmitter emitter = new SseEmitter();executorService.execute(() -> {try {for (int i = 0; i < 10; i++) {emitter.send("Message " + i, MediaType.TEXT_PLAIN);TimeUnit.SECONDS.sleep(1);}emitter.complete();} catch (IOException | InterruptedException e) {emitter.completeWithError(e);}});return emitter;}
}
3. 配置跨域(可选)

如果前端和后端运行在不同端口上,需要配置跨域。

CorsConfig.java

package com.example.sse;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;@Configuration
public class CorsConfig implements WebMvcConfigurer {@Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/**").allowedOriginPatterns("*").allowedMethods("GET", "POST", "PUT", "DELETE").allowedHeaders("*").allowCredentials(true);}
}

二、客户端实现

在前端页面中,使用 EventSource 来订阅 SSE。

index.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>SSE Example</title>
</head>
<body><h1>Server-Sent Events Example</h1><div id="events"></div><script>const eventSource = new EventSource('/sse');eventSource.onmessage = function(event) {const newElement = document.createElement("div");newElement.innerHTML = "Message: " + event.data;document.getElementById("events").appendChild(newElement);};eventSource.onerror = function(event) {eventSource.close();alert("EventSource failed: " + event);};</script>
</body>
</html>

三、运行和测试

  1. 启动 Spring Boot 应用。
  2. 在浏览器中访问 http://localhost:8080,即可看到服务端每秒推送的消息。

四、扩展功能

1. 动态推送消息

可以通过维护一个 SseEmitter 的映射来动态推送消息。

SseController.java(动态推送版本)

package com.example.sse;import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;import java.io.IOException;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;@RestController
public class SseController {private final Map<String, SseEmitter> emitterMap = new ConcurrentHashMap<>();@GetMapping("/sse/{userId}")public SseEmitter connect(@PathVariable String userId) {SseEmitter emitter = new SseEmitter();emitterMap.put(userId, emitter);emitter.onCompletion(() -> emitterMap.remove(userId));emitter.onTimeout(() -> emitterMap.remove(userId));emitter.onError(e -> emitterMap.remove(userId));return emitter;}@GetMapping("/push/{userId}")public void push(@PathVariable String userId, @RequestParam String message) {SseEmitter emitter = emitterMap.get(userId);if (emitter != null) {try {emitter.send(message);} catch (IOException e) {emitter.completeWithError(e);emitterMap.remove(userId);}}}
}
2. 使用 WebFlux 实现 SSE

如果需要更高效的响应式编程支持,可以使用 Spring WebFlux。

SseController.java(WebFlux 版本)

package com.example.sse;import org.springframework.http.MediaType;
import org.springframework.http.codec.ServerSentEvent;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Flux;import java.time.Duration;@RestController
public class SseController {@GetMapping("/sse/stream")public Flux<ServerSentEvent<String>> streamSse() {return Flux.interval(Duration.ofSeconds(1)).map(sequence -> ServerSentEvent.<String>builder().id(String.valueOf(sequence)).event("periodic-event").data("Current time: " + java.time.LocalTime.now()).build());}
}

通过以上步骤,你可以实现一个完整的基于 Spring Boot 的 SSE 应用。

http://www.yayakq.cn/news/757947/

相关文章:

  • 能免费做微信群推广的网站品牌建设 厚植
  • 旅行社网站方案网站建设工作室图片
  • 100种晚上禁用的app大全扬州网站建设网站排名优化
  • 广州网站建设开发设计室内设计用什么软件比较好
  • 旅游网站设计页面制作wordpress页面模板下载
  • 2 如何写一份详细的网站开发方案怎样做好网站推广
  • 青岛外贸网站建设哪家好网站建设公司muyunke
  • 上海做oocl船的公司网站阿里巴巴网站导航栏怎么做
  • 北京免费网站开发维护苏州网站建设报价单
  • 佛山网站设计平台网站建设周记
  • 泰州专一做淘宝网站rtt全民互助平台网站开发
  • 做韩国网站wordpress ip 访问
  • 汉川网站推广服务甘肃省建设厅不动产网站
  • 做网站和做系统有什么区别建立网站英文翻译
  • 北京公司网站优化牛推网络
  • 舒城网站建设网站建设制作及推广
  • 徐汇网站设计网站建设英文怎么写
  • 腾讯云网站备案吗珠海百度关键字优化
  • 新建的wordpress没有注册泉州seo外包
  • 网站域名免费申请怎么利用爬虫技术 提高网站排名
  • wordpress签到打卡插件优化网站标题是什么意思
  • 西安做网站公司玖佰网络推荐一些做电子的网站
  • 中小企业网站设计与开发目的公众号购买
  • 做公益活动的网站各省施工备案网站
  • 佛山网站建设设计公司哪家好生意网官网
  • 做网站需要了解什么广州知名网站建设性价比高
  • 虚拟会员商城网站分销微信公众号用什么开发
  • 广州海珠做网站网投网站怎样建
  • 免费网站建设绑定域名网站设计包含哪些技术
  • 图书馆建设网站需要哪些费用网站域名不想实名认证