玩线程架构

时间:2012-09-28 03:41:12

标签: architecture playframework-2.0

Play被描述为“反应式”框架,对异步编程非常有用。我想更多地了解游戏的架构,主要是:

  • 是否有事件循环?

  • 它有很多akka演员系统吗?他们是否有许多线程池支持?

  • 如果有,有多少个线程池,它们的目标是什么(路由,请求处理,承诺兑换,anorm等)

  • 我们 ok 要阻止哪个执行线程(我们可以在哪里进行一些昂贵的计算)?哪个是我们永远不应该阻止的执行线程?

任何关于此的资源/维基/建议都非常有用。谢谢

2 个答案:

答案 0 :(得分:7)

注意:以下内容适用于Play! 2.1.x.为......而玩! 2.0.4请参阅nico_ekito的回答。

与客户的互动可以通过以下图表进行总结:

Play!’s architecture

Play的HTTP处理程序(构建在Netty之上)存在于自己的执行上下文中。当它收到请求时,它会尝试根据URL(使用应用程序的conf/routes文件)查找应用程序的入口点。此时,只有HTTP请求的标头被加载到内存中。

然后,调用入口点。它通常是action,它会加载剩余的身体(如果有的话)。这发生在不同的执行环境中,Play! “user”执行上下文,定义为可以在应用程序的conf/application.conf文件中配置的Akka actor调度程序。

最后,在操作中,您可以执行异步调用(例如,调用Web Service)。所有这些异步调用都使用Scala的Future API,因此它们使用调用站点范围内可用的执行上下文。所以你可以使用Play! “用户”执行上下文(在play.api.libs.concurrent.Execution.defaultContext中定义)。

总之,玩!为以下任务使用不同的执行上下文:

  • 接收请求(Netty HTTP处理程序);
  • 调用操作(“用户”执行上下文)。

您可以自由地使用您想要的异步计算执行上下文(包括Play!“user”执行上下文)。

这个想法是所有用户代码默认使用Play! “用户”执行上下文。如果您阻止它,您将无法运行更多用户代码,但可以继续执行其他所有操作。

如果您正在进行广泛的计算,我建议您使用专用的执行上下文。

答案 1 :(得分:1)

查看Akka默认配置和the Play! wiki上的演员列表。