Akka如何在Play中使用?

Play的主页说:

Play基于Akka构build,为高度可扩展的应用程序提供可预测且最小的资源消耗(CPU,内存,线程)。

我想知道在Play中使用Akka的方式和位置,以及在Akka之上构buildPlay的后果是什么。

在Play 2.0中,Play委托了所有通过演员的请求。 它非常依赖Akka未来的API和其他部分。

在Play 2.1中,随着Akka将来的API升级到Scala 2.10,Play开始直接依靠Akka。 它从Akka获取所有的执行上下文,并提供与Akka的集成,但这是关于它的程度。

在Play 2.3中,我们添加了新的function来帮助Akka集成,尤其是在WebSocket周围。

在Play 2.4中,Play将被移植到新的akka​​-http(以前称为spray),在这一点上,Play将会像Akka一样build立在你可以获得的位置上。

后果是什么? Akka为编程提供了一个范例,使并发简单易行。 它也为分布式编程提供了很好的抽象 – 分布式编程最难的是正确地处理故障(这种情况一直发生)。 大多数工具试图通过试图隐藏你的失败来解决这个问题,但不幸的是,隐藏某些东西并不能使它消失,事实上确实使事情变得更加困难,因为当你试图解决特定types的失败时,它们被隐藏从你的方式得到你的方式。 Akka推动了你的面对失败,所以当你编码时,你不得不考虑你的应用程序将如何应对失败。 因此,您不得不以这样的方式devise/编写您的应用程序,使其能够容忍失败。 它还为您提供了以分层方式处理这些问题的工具,允许您指定要处理哪种级别的故障以及如何响应故障(死机,重试n次等) 。

那么这对Play有什么帮助? 更好的问题是它如何帮助Play用户? Akka帮助我实现了Play本身,但是可以在没有Akka的情况下实现它(实际上Netty现在完成了大部分的繁重工作,这在Play 2.4中将会改变)。 重要的是,Play与Akka无缝集成,可以轻松处理与演员的HTTP请求,处理故障等,这有助于Play用户,因为它允许他们devise自己的应用程序,使其具有可扩展性和弹性。

更新:以上是3年前写的,自那以后发生了很多变化。 Play 2.4确实为akka-http提供了实验支持,但Play默认使用Netty。

在Play 2.5中,我们弃用了iteratees API并切换到Akkastream。 这意味着现在所有asynchronousIO都通过Akkastream。 很快(不知道这是否会播放2.6或更高版本),播放将轻弹开关使akka-http服务器的默认支持实现(虽然还不是WS客户端)。

更新2:Play 2.6现在使akka-http成为HTTP服务器的默认后端实现(Netty仍然可用作为选项)。