Pab*_*dez 6 architecture playframework-2.0
Play被描述为"反应式"框架,对异步编程很有用.我想更多地了解Play的架构,主要是:
它有事件循环吗?
它有很多akka演员系统吗?他们是否有许多线程池支持?
如果是这样,有多少个线程池,它们的目标是什么(路由,请求处理,承诺兑换,anorm等)
这是我们的执行线程确定阻塞(这里我们可以做一些昂贵的计算)?哪个是我们永远不应该阻止的执行线程?
任何资源/维基/建议都非常有用.谢谢
注意:以下内容适用于Play!2.1.x. 为......而玩!2.0.4参见nico_ekito的回答.
可以通过以下图表总结与客户的交互:

Play的HTTP处理程序(构建在Netty之上)存在于自己的执行上下文中.当它收到请求时,它会尝试根据URL(使用应用程序的conf/routes文件)查找应用程序的入口点.此时,只有HTTP请求的标头被加载到内存中.
然后,调用入口点.它通常是一个动作,加载剩余的身体,如果有的话.这发生在不同的执行环境中,Play!"user"执行上下文,定义为可以在应用程序conf/application.conf文件中配置的Akka actor调度程序.
最后,在一个动作中你可以执行异步调用(例如,调用Web服务).所有这些异步调用都使用Scala的Future API,因此它们使用调用站点范围内可用的执行上下文.所以你可以使用Play!"用户"执行上下文(在中定义play.api.libs.concurrent.Execution.defaultContext).
总之,玩!为以下任务使用不同的执行上下文:
您可以自由地使用您想要的任何执行上下文进行异步计算(包括Play!"user"执行上下文).
这个想法是所有用户代码默认使用Play!"用户"执行上下文.如果阻止它,您将无法运行更多用户代码,但可以继续执行其他所有操作.
如果您正在进行扩展计算,我建议您使用专用的执行上下文.