Так как Netty является неблокирующим сервером, какое действие меняет действие на использование .async
?
def index = Action { ... }
против
def index = Action.async { ... }
Я понимаю, что с .async
вы получите Future[SimpleResult]
. Но так как Netty не блокирует, будет ли вообще играть что-то подобное под обложками?
Какое влияние это будет на пропускную способность/масштабируемость? Не трудно ли ответить на вопрос, где это зависит от других факторов?
Причина, по которой я спрашиваю, у меня есть собственный пользовательский Action
, и я хотел reset тайм-аут cookie для каждого запроса на страницу, поэтому я делаю это, что является вызовом 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 не блокирует, может быть, я на самом деле ничего не изменил, поскольку это было уже асинхронно?
Или я просто создал другой асинхронный вызов, встроенный в другой?
Надеясь, что кто-то сможет прояснить это с некоторыми деталями и как или каким эффектом это будет иметь производительность/пропускная способность.