为什么Play中的动作控制器是单例对象?

时间:2014-08-03 17:01:27

标签: scala playframework

在Play 2.3教程中写的是

  

Controller只不过是一个生成Action值的单例对象。

并提供以下示例。

package controllers
import play.api.mvc._

object Application extends Controller {
 def index = Action {
   Ok("It works!")
 }
}

这一切都很好,但我正在考虑并发性以及这个单例对象控制器从性能的角度来看究竟如何? 任何熟悉Play内部架构的人都可以解释为什么控制器应该是单例,以及多个用户请求如何通过这个单例对象?

1 个答案:

答案 0 :(得分:3)

在Play Design中,Action是无状态的:它获取请求并提出结果。控制器定义可以从路由器调用的Action(或通过链接其他操作),这仍然不意味着具有状态。作为无状态,并发不能引发访问共享数据的问题(来自实例状态)。

这就是为什么控制器可以是单例/无状态实例(或者不是,它不会让播放控制器被定义为class)。