Какой эффект имеет использование Action.async, так как Play использует Netty, который не блокирует
Поскольку Netty является неблокирующим сервером, какой эффект приводит к изменению действия на использование.async
?
def index = Action { ... }
против
def index = Action.async { ... }
Я понимаю что с.async
вы получитеFuture[SimpleResult]
, Но так как Netty не блокирует, Play все равно будет делать что-то подобное под прикрытием?
Как это повлияет на пропускную способность / масштабируемость? Это сложный вопрос, чтобы ответить, где это зависит от других факторов?
Я спрашиваю, потому что у меня есть свой обычайAction
и я хотел сбросить время ожидания куки для каждого запроса страницы, поэтому я делаю это, который являетсяasync
вызов:
object MyAction extends ActionBuilder[abc123] {
def invokeBlock[A](request: Request[A], block: (abc123[A]) => Future[SimpleResult]) = {
...
val result: Future[SimpleResult] = block(new abc123(..., result))
result.map(_.withCookies(...))
}
}
Отнимите от приведенного выше фрагмента я используюFuture[SimpleResult]
это похоже на вызовAction.async
но это внутри самого моего действия?
Я хочу понять, как это повлияет на дизайн моего приложения. Похоже, что только из-за возможности устанавливать файлы cookie для каждого отдельного запроса я перешел с блокировки на неблокирование. Но я сбит с толку, так как Netty не блокирует, может быть, я действительно ничего не изменил в реальности, поскольку это было уже асинхронно?
Или я просто создал еще один асинхронный вызов, встроенный в другой?
Надеясь, что кто-то может уточнить это с некоторыми деталями и как или как это повлияет на производительность / пропускную способность.