SSE(server-sent event) - springboot示例

什么是 SSE?

Server-Sent Events(SSE)是一种用于实现服务器向客户端实时推送数据的Web技术。与传统的轮询和长轮询相比,SSE提供了更高效和实时的数据推送机制。

SSE基于HTTP协议,允许服务器将数据以事件流(Event Stream)的形式发送给客户端。客户端通过建立持久的HTTP连接,并监听事件流,可以实时接收服务器推送的数据。

特点

  • 仅从服务器向客户端实现单向实时通信。
  • 实现简单,基于HTTP协议。
  • 浏览器端有断线重连功能。
  • 支持用户自定义消息类型。
  • 用来传送文本, 二进制需要编码。

基于springboot的示例

https://gitee.com/chenqi-jv/sse-test.git


参考: https://zhuanlan.zhihu.com/p/634581294

以下是一个基于Spring BootServer-Sent Events示例: 首先,在pom.xml文件中添加以下依赖项: ``` <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> ``` 接下来,创建一个名为“ServerSentEventController”的新类,该类将处理Server-Sent Events请求: ``` import java.time.LocalTime; 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; @RestController public class ServerSentEventController { @GetMapping(value = "/sse", produces = MediaType.TEXT_EVENT_STREAM_VALUE) public SseEmitter serverSentEvent() { SseEmitter emitter = new SseEmitter(); LocalTime currentTime = LocalTime.now(); // 发送当前时间 emitter.send(SseEmitter.event().data("Current time: " + currentTime.toString())); // 定时发送时间 Thread thread = new Thread(() -> { try { while (true) { Thread.sleep(5000); currentTime = LocalTime.now(); emitter.send(SseEmitter.event().data("Current time: " + currentTime.toString())); } } catch (Exception e) { emitter.complete(); } }); thread.start(); return emitter; } } ``` 在上面的代码中,我们创建了一个名为“serverSentEvent”的控制器方法,该方法返回一个SseEmitter对象,该对象将用于发送Server-Sent Events。在这个方法中,我们首先发送当前时间,然后设置一个线程,每隔5秒发送一次当前时间,直到连接关闭或发生异常为止。 最后,在Spring Boot应用程序的主类上添加@EnableWebMvc注释: ``` import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.web.servlet.config.annotation.EnableWebMvc; @SpringBootApplication @EnableWebMvc public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` 现在,您可以启动应用程序并访问“http://localhost:8080/sse”来查看Server-Sent Events的示例。您应该能够在浏览器中看到当前时间,并且每隔5秒钟更新一次。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值