java使用SseEmitter
时间: 2023-10-09 13:09:13 浏览: 138
SseEmitter是Spring框架提供的一种服务端发送事件的机制,可以用于实现服务器向客户端推送实时数据。使用SseEmitter时,服务器将实时数据封装成SSE(Server-Sent Events)格式,然后将其发送给客户端。
以下是一个使用SseEmitter的简单例子:
```
@RestController
public class MyController {
@GetMapping("/sse")
public SseEmitter sseEmitter() {
SseEmitter emitter = new SseEmitter();
new Thread(() -> {
try {
// 模拟实时数据发送
for (int i = 0; i < 10; i++) {
emitter.send(SseEmitter.event().data("Data " + i));
Thread.sleep(1000);
}
emitter.complete();
} catch (Exception e) {
emitter.completeWithError(e);
}
}).start();
return emitter;
}
}
```
在上面的例子中,当客户端向“/sse”路径发起GET请求时,服务器会创建一个SseEmitter对象,并返回给客户端。服务器会在另一个线程中模拟实时数据的发送,并将数据封装成SSE格式,使用SseEmitter的send方法发送给客户端。当数据发送完成后,服务器会调用SseEmitter的complete方法,表示数据已经发送完毕。
客户端可以使用JavaScript的EventSource对象接收服务器发送的实时数据,代码如下:
```
var source = new EventSource('/sse');
source.onmessage = function(event) {
console.log(event.data);
};
```
在上面的代码中,客户端使用EventSource对象建立与服务器的连接,并监听服务器发送的消息。当有新的消息到达时,客户端会自动触发onmessage回调函数,从而实现实时数据的接收。
需要注意的是,使用SseEmitter时需要考虑到网络延迟和服务器性能等因素,避免数据发送过快导致服务器负载过高。另外,SseEmitter也支持设置超时时间和错误处理等功能,可以根据实际需求进行配置。
阅读全文