使用Spring Boot实现Server-Sent Events(SSE)的完整指南

什么是Server-Sent Events(SSE)

Server-Sent Events(SSE)是一种用于实现单向实时更新的Web技术。它基于HTTP协议,允许服务器主动向客户端推送数据。这使得用户能够在不刷新页面的情况下收到实时信息,非常适合用于实时通知、数据更新等场景。

Spring Boot项目搭建

在开始之前,确保你已经安装了Java和Maven。然后,我们可以通过Spring Initializr(https://start.spring.io/)创建一个新的Spring Boot项目,选择以下依赖:

  • Spring Web
  • Spring Boot DevTools(可选,方便开发时热重载)

创建完成后,下载并解压项目文件。

创建SSE Controller

首先,我们需要创建一个控制器,以处理客户端的SSE请求。以下是一个简单的SSE控制器示例:

package com.example.sse;

import org.springframework.http.MediaType;
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(value = "/sse", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
    public Flux<String> streamSse() {
        return Flux.interval(Duration.ofSeconds(1))
                .map(sequence -> "SSE - " + sequence);
    }
}

在上面的代码中,我们使用了Spring WebFlux的Flux类来创建一个流。在客户端请求/sse端点时,服务器每秒钟会推送一条消息,包括当前的序列号。

配置WebFlux

为了使应用支持SSE,我们需要在pom.xml中添加WebFlux的依赖。请确保你的pom.xml包含以下内容:

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

创建前端页面

接下来,我们需要一个前端页面来接收和显示SSE消息。创建一个src/main/resources/static/index.html文件,添加以下内容:

<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>SSE Demo</title>
</head>
<body>
    <h1>Server-Sent Events Demo</h1>
    <div id="events"></div>

    <script>
        const eventSource = new EventSource('/sse');
        eventSource.onmessage = function(event) {
            const eventDiv = document.createElement('div');
            eventDiv.textContent = event.data;
            document.getElementById('events').appendChild(eventDiv);
        };
    </script>
</body>
</html>

在上面的HTML中,我们使用了EventSource对象来连接到服务器的SSE流。每当接收到消息时,我们创建一个新的div元素,并将消息内容添加到页面上。

运行应用

现在,一切都已准备就绪。你可以在IDE中运行Spring Boot应用,或者在项目目录下使用以下命令:

mvn spring-boot:run

打开浏览器,访问http://localhost:8080,你应该能够看到一个实时更新的消息流。

总结

在本指南中,我们学习了如何使用Spring Boot实现Server-Sent Events(SSE)。通过简单的代码示例,我们创建了一个服务器端的控制器,配置了WebFlux,并实现了一个前端页面来接收和显示实时消息。SSE是一种非常强大且易于实现的技术,可以帮助你构建实时更新的Web应用。希望你能在自己的项目中开发出更多有趣的功能!

点赞(0) 打赏

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部