首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring为SSE抛出IOException

Spring为SSE抛出IOException
EN

Stack Overflow用户
提问于 2018-12-03 16:49:07
回答 1查看 3.5K关注 0票数 3

我一直试图使用Spring (2.1.1.RELEASE)实现服务器发送的事件,并在JavaScript应用程序(Rang7)中使用它。

问题是,每当我在客户机上的.close()方法上使用EventSource时,服务器就会抛出:

错误java.io.IOException:主机中用于HTTP "/price“的软件中止了已建立的连接,但ServerHttpResponse已经提交(200 OK)

代码非常简单:

代码语言:javascript
复制
@RestController("/price")
public class PriceController {

private final PriceProvider priceProvider;

public PriceController (PriceProvider priceProvider) {
    this.priceProvider = priceProvider;
}


@GetMapping(produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<Price> randomPrices () {
    return priceProvider.getPrices().log();
}

}

Flux的创建方式如下:

代码语言:javascript
复制
Flux.interval(Duration.ofSeconds(1)).map(i -> randomPrice());

在客户端,我试图使用本机EventSource和polly填充,但结果始终相同。这是输出:

  • 2018-12-03 17:29:59.388 INFO 15080 -- restartedMain c.m.t.sseserver.SseServerApplication :在1.844秒内启动SseServerApplication (JVM运行2.874秒)
  • 2018-12-03 17:30:10.519 INFO 15080 - ctor-http-nio-2反应器。
  • 2018-12-03 17:30:10.519 INFO 15080 - ctor-http-nio-2反应器。
  • 2018-12-03 17:30:11.522 INFO 15080 --并行-1反应器。组装1:x onNext(currency=EUR,rate=30.314275239679823)
  • 2018-12-03 17:30:11.565 INFO 15080 - ctor-http-nio-2反应器。
  • 2018-12-03 17:30:12.521 INFO 15080 --并行-1反应器。组装1:x onNext(currency=PLN,rate=41.7888937560866)
  • 2018-12-03 17:30:13.521 INFO 15080 --并行-1反应器。组装1:x onNext(currency=CHF,rate=89.64097216739523)
  • 2018-12-03 17:30:14.521 INFO 15080 --并行-1反应器。组装1:x onNext(currency=EUR,rate=87.5498883139903)
  • 2018-12-03 17:30:15.521 INFO 15080 --并行-1反应器。组装1:x onNext(currency=PLN,rate=28.019190555534855)
  • 2018-12-03 17:30:16.521 INFO 15080 --并行-1反应器。组装1:x onNext(currency=PLN,rate=78.07885390201281)
  • 2018-12-03 17:30:17.522 INFO 15080 --并行-1反应器。组装1:x onNext(currency=EUR,rate=95.44618060483998)
  • 2018-12-03 17:30:17.534 INFO 15080 - ctor-http-nio-2反应器。
  • 2018-12-03 17:30:17.549错误15080 - ctor- HTTP -nio-2 o.s.w.s.adapter.HttpWebHandlerAdapter : e24fb0e9 ERROR java.io.IOException:一个已建立的连接被您的主机中的HTTP "/price“软件中止,但是ServerHttpResponse已经提交(200 OK)

尽管如此,程序的行为似乎是正确的,尽管我的日志中充满了这些丑陋的错误。有没有办法解决这个问题,或者至少吞下这个例外?

EN

回答 1

Stack Overflow用户

发布于 2018-12-04 11:26:28

这看起来很像SPR-17257。在本例中,我们得到了一个IOException,如果您是从另一台服务器传输数据,那么很难区分正在离开的客户端和远程异常。

SPR-17341将在SpringFramework5.2版本中尝试解决这个问题,该版本将包含在SpringBoot2.2中。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53598208

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档