gpt4 book ai didi

java - SseEmitter Spring MVC 返回传输已关闭,剩余未完成的读取数据

转载 作者:行者123 更新时间:2023-11-30 06:20:47 34 4
gpt4 key购买 nike

我有一个 SpringMVC 项目,其中我在其中一个 REST Controller 中使用 SseEmitter。下面是代码:

@RequestMapping(path = "/finite/{count}", method = RequestMethod.GET)
public SseEmitter getFiniteMessages(@PathVariable int count){
LOG.info("Request received for finite messages.");
final SseEmitter emitter = new SseEmitter();
ExecutorService service = Executors.newSingleThreadExecutor();
service.execute(() -> {
for (int i = 0; i < count; i++) {
try {
emitter.send(LocalTime.now().toString() , MediaType.TEXT_PLAIN);
Thread.sleep(200);
} catch (Exception e) {
LOG.error(e.getMessage());
emitter.completeWithError(e);
return;
}
}
emitter.complete();
});

return emitter;
}

但是当我对其进行 curl 时,即

curl -X GET http://localhost:8080/score/sse/finite/4

我得到

curl: (18) transfer closed with outstanding read data remaining

我无法弄清楚问题出在哪里。

最佳答案

我解决了这个问题。我已在 web.xml 文件中添加了以下标签。

<async-supported>true</async-supported>

这允许 Servlet 存储传入请求以供以后响应,就像我用于发送服务器发送事件一样。

这是完整的 servlet 映射。

<servlet>
<servlet-name>score</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/spring-servlet.xml</param-value>
</init-param>
<async-supported>true</async-supported>
</servlet>

关于java - SseEmitter Spring MVC 返回传输已关闭,剩余未完成的读取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48191108/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com