首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

我可以在Java中订阅SseEmitter吗

在Java中,SseEmitter 是 Spring 框架提供的一种用于服务器发送事件(Server-Sent Events, SSE)的机制。SSE 是一种允许服务器向客户端推送实时更新的技术,通常用于实时通知、消息推送等场景。

SseEmitter 主要用于在服务器端推送事件到客户端。客户端可以使用 JavaScript 的 EventSource 对象来接收这些事件。

如何在Java中使用 SseEmitter

以下是一个简单的示例,展示如何在 Spring Boot 应用中使用 SseEmitter 来实现服务器发送事件。

1. 添加依赖

首先,确保你的项目中包含 Spring Boot 相关的依赖。如果你使用 Maven,可以在 pom.xml 中添加以下依赖:

代码语言:javascript
复制
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

2. 创建控制器

创建一个 Spring 控制器来处理 SSE 连接和事件推送。

代码语言:javascript
复制
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 {

    @GetMapping("/sse")
    public SseEmitter handleSse() {
        SseEmitter emitter = new SseEmitter();

        ExecutorService executor = Executors.newSingleThreadExecutor();
        executor.execute(() -> {
            try {
                for (int i = 0; i < 10; i++) {
                    emitter.send("Message " + i);
                    TimeUnit.SECONDS.sleep(1);
                }
                emitter.complete();
            } catch (IOException | InterruptedException e) {
                emitter.completeWithError(e);
            }
        });

        return emitter;
    }
}

在这个示例中,/sse 端点会返回一个 SseEmitter 对象,并在一个单独的线程中每秒发送一条消息给客户端。

3. 客户端代码

在客户端,可以使用 JavaScript 的 EventSource 对象来接收服务器发送的事件。

代码语言:javascript
复制
<!DOCTYPE html>
<html>
<head>
    <title>SSE Example</title>
</head>
<body>
    <h1>Server-Sent Events</h1>
    <div id="messages"></div>

    <script>
        const eventSource = new EventSource('/sse');

        eventSource.onmessage = function(event) {
            const newElement = document.createElement("div");
            newElement.innerHTML = "Received: " + event.data;
            document.getElementById("messages").appendChild(newElement);
        };

        eventSource.onerror = function(event) {
            console.error("EventSource failed:", event);
        };
    </script>
</body>
</html>

这个简单的 HTML 页面会连接到 /sse 端点,并显示接收到的消息。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券