小编cje*_*rik的帖子

收到服务器发送的事件并立即捕获错误导致 SSE 关闭

我已经为我的 spring-boot 应用程序实现了一个端点,它返回一个服务器发送的事件,我多次向该事件发送一个简单的字符串。当对此端点发出请求时,它被打开,然后发生错误。我发送的字符串似乎没有到达前端。

这是控制器:

@RequestMapping("/sseTest")
@Async
public ResponseBodyEmitter handleRequest() {
    final SseEmitter emitter = new SseEmitter();
    ExecutorService service = Executors.newSingleThreadExecutor();
    service.execute(() -> {
        for (int i = 0; i < 500; i++) {
            try {
                emitter.send(123 , MediaType.TEXT_PLAIN);
                Thread.sleep(200);
            } catch (Exception e) {
                e.printStackTrace();
                emitter.completeWithError(e);
                return;
            }
        }
        emitter.complete();
    });
    return emitter;
}
Run Code Online (Sandbox Code Playgroud)

以及处理请求的前端代码:

const eventSource = new EventSource('http://localhost:8080/sseTest');
eventSource.onopen = e => console.log('open');
eventSource.onerror = e => {
    if (e.readyState == EventSource.CLOSED) {
        console.log('close');
    } else {
        console.log(e); …
Run Code Online (Sandbox Code Playgroud)

javascript java spring server-sent-events spring-boot

5
推荐指数
1
解决办法
723
查看次数