执行以下操作:
Action.async {
implicit request: Request[AnyContent] =>
logger.warn(s"CALL: $request")
Future {
blocking {
Thread.sleep(120000)
logger.warn("FINISHED")
Ok("{}")
}
}
}
我希望在t = 0时看到CALL
,在t = 120时看到FINISHED
。但是会发生以下情况:
t=0s: CALL
t=75s: CALL
t=120s: FINISHED
t=195s: FINISHED
然后页面显示“连接已重置”。
这是怎么回事!?
答案 0 :(得分:1)
事实证明,默认情况下,Play使用带有host connection pool的Akka.Http。这意味着当第一个请求超时(play.server.http.idleTimeout
默认为75s)时,它将自动重新发送请求。
specified仅重试幂等请求,这就是我弄错的地方:我的请求使用GET,但在服务器端触发的操作不是幂等的。因此,我应该改用POST。
Source