玩被描述为一个'反应性'框架,对异步编程有用。我想了解更多关于游戏的架构,主要有:玩线程体系结构
它是否有事件循环?
它是否有许多阿卡演员系统?他们是否支持多个线程池?
如果是的话有多少线程池在那里,他们是什么目的(路由,请求处理,保证救赎,ANORM等)
这是执行的线程,我们OK阻止(我们可以在哪里进行一些昂贵的计算)?哪一个是我们永远不会阻止的执行线程?
对此的任何资源/ wiki /建议是非常有用的。谢谢
玩被描述为一个'反应性'框架,对异步编程有用。我想了解更多关于游戏的架构,主要有:玩线程体系结构
它是否有事件循环?
它是否有许多阿卡演员系统?他们是否支持多个线程池?
如果是的话有多少线程池在那里,他们是什么目的(路由,请求处理,保证救赎,ANORM等)
这是执行的线程,我们OK阻止(我们可以在哪里进行一些昂贵的计算)?哪一个是我们永远不会阻止的执行线程?
对此的任何资源/ wiki /建议是非常有用的。谢谢
注意:以下内容适用于Play! 2.1.x.为......而玩! 2.0.4请参阅nico_ekito的答案。
与客户的相互作用可以通过下面的图表来概括:
Play的HTTP处理程序(建立在Netty顶部)生活在自己的执行上下文。当它收到请求时,它会尝试根据URL找到应用程序的入口点(使用应用程序的conf/routes
文件)。此时,只有HTTP请求的头部被加载到内存中。
然后,调用入口点。它通常是一个action,加载剩余的身体,如果有的话。这发生在不同的执行上下文中,Play! “用户”执行上下文,定义为可以在应用程序的conf/application.conf
文件中配置的Akka actor调度程序。
最后,在一个动作中,您可以执行异步调用(例如调用Web Service)。所有这些异步调用都使用Scala的Future API,因此它们使用调用站点范围内可用的执行上下文。所以你可以使用Play! “用户”执行上下文(在play.api.libs.concurrent.Execution.defaultContext
中定义)。
综上所述,Play!为以下任务使用不同的执行上下文:
而且您可以随意使用您希望用于异步计算的任何执行上下文(包括Play!“用户”执行上下文)。
这个想法是所有用户代码默认使用Play! “用户”执行上下文。如果你阻止它,你将无法运行更多的用户代码,但可以继续做其他事情。
如果你在做扩展计算,我建议你使用专用的执行上下文。
看看Akka默认配置和the Play! wiki上的演员列表。
谢谢@Julien。所以用户执行上下文(这是默认的)可以在'application.conf'中调整?什么是默认配置? –
调度员的名字是“play”,你可以将其配置为任何[Akka dispatcher](http://doc.akka.io/docs/akka/2.1.0-RC1/scala/dispatchers.html) –