【发布时间】:2018-12-03 16:49:07
【问题描述】:
我一直在尝试使用 Spring Webflux (2.1.1.RELEASE) 实现服务器发送事件并在 JavaScript 应用程序 (Angular 7) 中使用它。
问题是,每当我在客户端的 EventSource 上使用 .close() 方法时,它都会使服务器抛出:
HTTP GET "/price" 的错误 [java.io.IOException: 已建立的连接被主机中的软件中止],但 ServerHttpResponse 已提交 (200 OK)
代码非常简单:
@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 创建如下:
Flux.interval(Duration.ofSeconds(1)).map(i -> randomPrice());
在客户端,我尝试使用本机 EventSource 和 pollyfills,但结果始终相同。这是输出:
- 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 信息 15080 --- [ctor-http-nio-2] reactor.Flux.OnAssembly.1:| onSubscribe([Fuseable] FluxOnAssembly.OnAssemblySubscriber)
- 2018-12-03 17:30:10.519 信息 15080 --- [ctor-http-nio-2] reactor.Flux.OnAssembly.1:|请求(1)
- 2018-12-03 17:30:11.522 信息 15080 --- [parallel-1] reactor.Flux.OnAssembly.1:| onNext(价格(货币=欧元,汇率=30.314275239679823))
- 2018-12-03 17:30:11.565 信息 15080 --- [ctor-http-nio-2] reactor.Flux.OnAssembly.1:|请求(31)
- 2018-12-03 17:30:12.521 信息 15080 --- [parallel-1] reactor.Flux.OnAssembly.1:| onNext(价格(货币=PLN,汇率=41.7888937560866))
- 2018-12-03 17:30:13.521 信息 15080 --- [parallel-1] reactor.Flux.OnAssembly.1:| onNext(价格(货币=瑞士法郎,汇率=89.64097216739523))
- 2018-12-03 17:30:14.521 信息 15080 --- [parallel-1] reactor.Flux.OnAssembly.1:| onNext(价格(货币=欧元,汇率=87.5498883139903))
- 2018-12-03 17:30:15.521 信息 15080 --- [parallel-1] reactor.Flux.OnAssembly.1:| onNext(价格(货币=PLN, rate=28.019190555534855))
- 2018-12-03 17:30:16.521 信息 15080 --- [parallel-1] reactor.Flux.OnAssembly.1:| onNext(价格(货币=PLN, rate=78.07885390201281))
- 2018-12-03 17:30:17.522 信息 15080 --- [parallel-1] reactor.Flux.OnAssembly.1:| onNext(价格(货币=欧元,汇率=95.44618060483998))
- 2018-12-03 17:30:17.534 信息 15080 --- [ctor-http-nio-2] reactor.Flux.OnAssembly.1:|取消()
- 2018-12-03 17:30:17.549 错误 15080 --- [ctor-http-nio-2] os.s.w.s.adapter.HttpWebHandlerAdapter:[e24fb0e9] 错误 [java.io.IOException:已建立的连接被主机中的软件] 用于 HTTP GET "/price",但 ServerHttpResponse 已提交 (200 OK)
尽管程序似乎运行正常,但我的日志中充满了这些丑陋的错误。有什么办法可以修复它或至少吞下异常?
【问题讨论】:
标签: spring netty server-sent-events spring-webflux reactive