Poiché Netty è un server non bloccante, quale effetto cambia una azione nell'uso di .async
?Che effetto ha utilizzando Action.async, dal momento che Play utilizza Netty che non è bloccante
def index = Action { ... }
contro
def index = Action.async { ... }
Capisco che con .async
si otterrà un Future[SimpleResult]
. Ma dal momento che Netty non blocca, giocherà comunque qualcosa di simile sotto le coperte?
Che effetto avrà sul throughput/scalabilità? È una domanda difficile a cui rispondere dove dipende da altri fattori?
Il motivo che chiedo è, ho il mio personalizzato Action
e volevo resettare il timeout dei cookie per ogni richiesta di pagina in modo che sto facendo questo, che è una chiamata 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(...))
}
}
Il togliere dal frammento di cui sopra è sto usando un Future[SimpleResult]
, è simile a chiamare Action.async
ma questo è all'interno della mia azione stessa?
Voglio capire che effetto avrà sul mio design dell'applicazione. Sembra che solo per la possibilità di impostare il mio cookie su base per richiesta sono passato dal blocco al non-blocco. Ma sono confuso da quando Netty non sta bloccando, forse non ho davvero cambiato nulla nella realtà dato che era già asincrono?
Oppure ho semplicemente creato un'altra chiamata asincrona incorporata in un'altra?
Sperando che qualcuno possa chiarire questo con alcuni dettagli e come o quale effetto ciò avrà nel rendimento/velocità effettiva.
Vedo, così nel mio "MyAction" qual è l'effetto netto dell'utilizzo di me utilizzando un futuro e callinf result.map? E se faccio Myaction.async nel mio controller? (rispetto all'utilizzo dell'azione predefinita) – Blankman
Bene, ho pensato di aver risposto alla tua domanda. Dovresti dare un'occhiata a questa pagina della documentazione: http://www.playframework.com/documentation/2.3.x/ScalaAsync – vptheron
Grazie ho letto prima. Quindi avere un futuro che chiama un futuro ecc. In realtà non influisce sulle prestazioni per dire? – Blankman