【发布时间】:2020-06-22 06:47:21
【问题描述】:
我的控制器中有这个动作
def doRegister = Action { implicit request =>
Future {
Thread.sleep(5000)
}
Ok("")
}
这是路线
POST /api/checkout/register controllers.shop.checkout.CheckoutAuthController.doRegister
我想返回 Ok 结果,而不是等待 Future。
它适用于 GET 请求(立即返回),但不适用于 POST。超时适用,调用的 javascript vuejs 项目必须等待。
【问题讨论】:
-
您的实际 poc 实现是
Thread.sleep还是只是这个问题的存根? -
根据您当前的实现,
Ok响应将立即返回,而无需等待Future完成,因为您没有使用Action.async,而只是Action.apply,它接受Response类型而不是@ 987654329@。请提供更多详细信息,为什么它不适用于 POST 请求?谢谢 -
但是在 3-4 个请求之后(取决于 cpu 核心的数量),你所有的线程都会被阻塞。在其中一个线程可用之前,不会处理下一个请求。
-
是的,你必须有一个单独的
ExecutionContext只是为了你不等待的Futures。如果你被请求淹没,那么这个执行器可能跟不上。 -
@SarveshKumarSingh 我的实现是一个发送邮件的服务,但是问题是一样的
标签: scala playframework future blocking