在Java中,SseEmitter
是 Spring 框架提供的一种用于服务器发送事件(Server-Sent Events, SSE)的机制。SSE 是一种允许服务器向客户端推送实时更新的技术,通常用于实时通知、消息推送等场景。
SseEmitter
主要用于在服务器端推送事件到客户端。客户端可以使用 JavaScript 的 EventSource
对象来接收这些事件。
SseEmitter
以下是一个简单的示例,展示如何在 Spring Boot 应用中使用 SseEmitter
来实现服务器发送事件。
首先,确保你的项目中包含 Spring Boot 相关的依赖。如果你使用 Maven,可以在 pom.xml
中添加以下依赖:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
创建一个 Spring 控制器来处理 SSE 连接和事件推送。
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
对象,并在一个单独的线程中每秒发送一条消息给客户端。
在客户端,可以使用 JavaScript 的 EventSource
对象来接收服务器发送的事件。
<!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
端点,并显示接收到的消息。
领取专属 10元无门槛券
手把手带您无忧上云