我想在Play 2.5应用中使用Server-Sent Events。 API端点的Content-Type为text/event-stream
。
我在设置REST调用的超时时遇到了困难。
当我将请求超时设置为-1
时 - 请求永远不会超时 - 在120秒后调用whenComplete
而没有异常。
CompletionStage<StreamedResponse> events = ws.url("https://example.com/events")
.setMethod("GET")
.setHeader("Accept", "text/event-stream")
.setRequestTimeout(-1)
.stream();
events.thenCompose(res -> {
Source<ByteString, ?> responseBody = res.getBody();
return responseBody.via(Framing.delimiter(ByteString.fromString("\n"), Integer.MAX_VALUE, FramingTruncation.ALLOW)).map(ByteString::utf8String).runForeach(data -> logger.info(data), materializer);
}).whenComplete((done, throwable) -> {
if (throwable != null) {
logger.error(throwable.getMessage(), throwable);
}
logger.info("Done");
});
当我将RequestTimeout设置为Integer.MAX_VALUE
时,请求在120秒后没有超时。但是,它可能会在约25天后超时请求。
如何将超时设置为无限?
答案 0 :(得分:0)
假设您正在使用AhcWSClient
val client = AhcWSClient()
然后你可以这样做,
client.url("www.streamingurl.com")
.withMethod("GET")
.withRequestTimeout(Duration.Inf)
.stream()