java 实现sse
时间: 2024-07-09 09:00:49 浏览: 148
sse-java
Server-Sent Events (SSE) 是一种实时的 Web 通信技术,它允许服务器向浏览器推送数据,而无需客户端主动发起请求。在 Java 中实现 SSE,通常涉及到以下几个步骤:
1. **服务器端处理**:
- 创建一个 HTTP 操作(通常是 GET 请求)。
- 在响应头中设置 `Content-Type: text/event-stream` 和 `Cache-Control: no-cache`,告诉浏览器这是一个 SSE 流。
- 使用循环或流式处理机制,每次有新数据时发送一个事件(Event: ...)。
- 使用分隔符(如 `\n\n` 或 `\r\n\r\n`)来标记每个事件。
```java
import java.io.OutputStream;
import jakarta.servlet.http.HttpServletResponse;
public void handleSseRequest(HttpServletRequest request, HttpServletResponse response) {
response.setHeader("Content-Type", "text/event-stream;charset=UTF-8");
response.setHeader("Cache-Control", "no-cache");
OutputStream outputStream = response.getOutputStream();
try {
outputStream.write("event: data\n".getBytes()); // 开始事件
outputStream.write(("data: " + "New message from server").getBytes());
outputStream.write("\n\n".getBytes()); // 结束当前事件并换行
// 模拟持续推送,这里可以用线程或者定时器实现
while (true) {
// 每隔一段时间更新数据并发送
Thread.sleep(2000);
outputStream.write(("data: " + "Another update").getBytes());
outputStream.write("\n\n".getBytes());
}
} finally {
outputStream.close();
}
}
```
2. **客户端接收**:
- JavaScript 中,可以使用 `EventSource` 对象来监听服务器的数据推送。
- 创建一个新的 `EventSource` 对象,并在 `onmessage` 事件中处理接收到的数据。
```javascript
var source = new EventSource('/sse');
source.onmessage = function(event) {
var data = event.data;
console.log('Received:', data);
};
```
阅读全文