7

我是新来的游戏!web 框架,为了了解它是如何工作的,以及它与其他 web 框架的比较,我希望能够在 Play! 源代码,从开始到结束的请求生命周期。我将使用 Play! 的 Scala 实现。

因为我的大部分经验都是使用 PHP 框架,所以我习惯于从 web 根目录中的 index.php 文件开始,然后向下阅读任何包含的配置/引导脚本、依赖注入处理、请求路由、动作调度,最后是视图/响应渲染。

我无法确定 Scala/Play 的类似入口点!应用程序,我非常感谢朝着正确的方向前进。请求生命周期的演练当然会非常慷慨,但我真正需要的只是显示入口点。

4

3 回答 3

3

默认情况下,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 绑定到关系数据库。

于 2013-02-08T10:31:34.360 回答
2

我认为这是您的意思的文件:

https://github.com/playframework/playframework/blob/master/framework/src/play-netty-server/src/main/scala/play/core/server/NettyServer.scala

Play 是一个在给定端口开始侦听的 Java 应用程序。使用 Netty 库完成侦听,该库了解不同类型的网络协议(最重要的是 HTTP)。一旦 Netty 知道发生了什么,它将控制 Play 框架。

然后 Play 框架将使用全局文件与路由组合来确定要调用的操作。

于 2013-02-08T07:45:21.477 回答
1

Play 更像是一个安静的框架(请阅读http://en.wikipedia.org/wiki/Representational_state_transfer),而不是典型的基于模板的框架,如带有请求生命周期概念的 jsp jsf 等,尽管它也支持模板。基本思想也是基于json等纯数据与服务器进行交互,并且大部分用于更新dom结构的代码都是用javascript编写的,并且只在客户端完成,这实际上更灵活,更简单有效。

在游戏中,您只需在 scala 类中定义一个方法并将其映射到路由文件中,即可轻松地创建用于向浏览器发送数据的方法。就像在典型的 Web 开发过程中一样,您还将 html 文件放在公共资源文件夹(或创建模板)中,这通常会在浏览器中执行时对该方法进行 ajax 调用。

于 2013-02-08T03:05:21.290 回答