收到服务器发送事件并立即发现错误导致 SSE 关闭
Posted
技术标签:
【中文标题】收到服务器发送事件并立即发现错误导致 SSE 关闭【英文标题】:Server-sent-event received and immediately an error is caught causing SSE to close 【发布时间】:2018-05-01 12:43:25 【问题描述】:我已经为我的 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;
以及处理请求的前端代码:
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);
;
eventSource.onmessage = event =>
console.log(event.data);
;
控制台记录以下内容:
open
Event type: "error"
事件已打开,但随后立即报告错误。
【问题讨论】:
【参考方案1】:我遇到了类似的问题。我创建了一个自定义过滤器,因此它会要求添加异步支持。
自定义过滤器 -
@WebFilter(urlPatterns="/*")
@Component
public class SessionFilter implements Filter
它弹出的错误是-
java.lang.IllegalStateException:必须在 servlet 和异步请求处理中涉及的所有过滤器上启用异步支持。这是在 Java 代码中使用 Servlet API 或通过在 web.xml 中的 servlet 和过滤器声明中添加“true”来完成的。
我删除了自定义过滤器。它就像一个魅力。
【讨论】:
以上是关于收到服务器发送事件并立即发现错误导致 SSE 关闭的主要内容,如果未能解决你的问题,请参考以下文章