为什么HttpEntity.toStrict在没有超时的情况下没有变体?

时间:2016-12-07 19:10:14

标签: akka-stream akka-http

Akka-http HttpEntity.toStrict是一种在需要完整正文供以后处理时使用实体的方法,但它没有没有超时参数的变体。

使用entity.dataBytes.runReduce(_ ++ _)并且没有超时的身体很容易。但后果是什么呢?

问题#1

如果HttpEntity.toStrict超时,akka-http会立即关闭连接吗?或者还在消耗身体丢弃数据?或者是什么?

问题#2

如果在没有超时的情况下使用正文(如上面的代码),并且连接“挂起”,akka-http配置中是否有任何适用的超时参数?对于客户?对于服务器?如果在启动主体之前连接“挂起”,是否有任何适用的超时参数?

问题#3

如果没有全局超时,为什么HttpEntity.discardBytes没有类似的超时参数?

1 个答案:

答案 0 :(得分:0)

  

如果HttpEntity.toStrict超时,akka-http会立即关闭连接吗?或者还在消耗身体丢弃数据?或者是什么?

关闭连接AFAIR,因为它被视为在流中传播的失败(以及取消)。

  

如果正文被消耗而没有超时(如上面的代码),并且连接"挂起",akka-http配置中是否有任何适用的超时参数?对于客户?对于服务器?如果连接"挂起"在启动正文之前,是否有任何适用的超时参数?

文档中有关于超时的完整部分:http://doc.akka.io/docs/akka-http/current/scala/http/common/timeouts.html 这些包括空闲超时,当连接和#34;挂起时会触发。

  

如果没有全局超时,为什么HttpEntity.discardBytes没有类似的超时参数?

存在全局安全超时,最明显的是请求超时和空闲超时。所有文档都记录在文档中。 http://doc.akka.io/docs/akka-http/current/scala/http/common/timeouts.html

discardBytes当你完全不关心这个实体时,实际上只是方便。我想我们可以添加一个超时超载,这是第一次有人要求它说实话。无论如何,您都可以使用Akka Streams超时阶段轻松添加超时。