默认情况下,Play 框架使用内置的 HTTP 服务器(基于Netty)。因此,与 PHP 最接近的类比是 Play 既是 Apache 又是 PHP。
PHP 使用传统的“CGI-like”范例:为单个 HTTP 请求提供服务,您的程序启动,并在完成服务请求后终止。在 CGI 中为 HTTP 请求提供服务,网络服务器启动外部程序——您的脚本——并返回其输出。旧版本的 PHP 只为 CGI 设计,在后来的版本中以其他方式与服务器交互,因为 CGI 很慢,但核心原理保持不变。
大多数 Web 应用程序技术使用另一种方法:您的 Web 应用程序启动一次然后保持运行,因此一个正在运行的 Web 应用程序实例继续为请求提供服务(并且可以并行处理多个请求)。它不会像在 PHP 中那样在服务一个请求后死掉。这允许每次启动应用程序所需的资源消耗更少,并且使用起来稍微困难一些,因为大多数请求处理隐藏在框架内部,并且您的应用程序只需要公开请求到达和返回时调用的控制器方法回复。
它还允许更大的灵活性,例如后台处理可以直接在 Web 应用程序内部启动,无需外部服务器进程。Play 有非常方便的 Akka 库。
随着越来越多的 Web 应用程序使用 Ajax 和 REST 方法,而不是每次都提供重量级网页,它变得更加重要。而且几乎不可能使用 PHP 创建具有良好性能的实时消息传递后端,无论请求技术如何(轮询、长轮询、带有多部分的 iframe)。
但如果与 PHP MVC 框架相比,从创建视图、模型和控制器的开发人员的角度来看,Play 非常相似。在 PHP MVC 框架和 Play 框架中都调用控制器方法或函数,并且该方法应该返回响应,视图通常是模板,模型通常是 ORM 绑定到关系数据库。