2013-02-08 3 views
7

私はPlayに新しいです!それが他のWebフレームワークとどのように比較されるかを理解するために、私はPlay!でトレースできるようにしたいと思います。ソースコード、開始から終了までの要求ライフサイクル。 Play!のScala実装を使用します。Play!のリクエストライフサイクルを理解するアプリケーション

ほとんどの私の経験はPHPフレームワークに基づいているので、私はWebルートディレクトリのindex.phpファイルから始め、含まれている設定/ブートストラップスクリプト、依存性注入処理、リクエストルーティング、アクションディスパッチ、最終的にはビュー/レスポンスレンダリングが含まれます。

Scala/Playの同様のエントリーポイントを特定できませんでした。私は正しい方向へのプッシュを非常に感謝しています。要求ライフサイクルのウォークスルーはもちろん非常に寛大ですが、私が本当に必要とするのはエントリーポイントを示すことだけです。

答えて

3

デフォルトでは、Playフレームワークは組み込みのHTTPサーバー(Nettyに基づいて)を使用します。 PHPに最も近い類推は、PlayがApacheとPHPの両方であることです。

PHPは従来の「CGIのような」パラダイムを使用しています.1つのHTTP要求を処理するためにプログラムが開始され、要求の処理が終了すると終了します。 HTTPリクエストを提供するCGIでは、Webサーバーが外部プログラム(スクリプト)を起動し、その出力を返します。古いバージョンのPHPは、CGIのためだけに設計されていました。それ以降のバージョンでは、CGIは非常に遅いため、コアの原則は変わりませんでした。

Webアプリケーションテクノロジのほとんどは、Webアプリケーションが一度起動されてから実行されるため、Webアプリケーションの1つの実行インスタンスが引き続き要求を処理します(複数の要求を並行して処理できます)。 PHPのように、1回のリクエストを処理した後も死ぬことはありません。これにより、毎回アプリケーションを起動するのに必要なリソースが非常に少なくて済み、作業がわずかに難しくなります。なぜなら、隠された内部フレームワークのリクエスト処理の大半と、リクエストが到着して戻ったときに呼び出されるコントローラメソッド応答。

さらに柔軟性を高めることができます。たとえば、バックグラウンド処理をWebアプリケーションの内部で開始することができます。外部サーバープロセスは不要です。 Playには非常に便利なAkkaライブラリがあります。

WebアプリケーションがAjaxとRESTのアプローチを使用するようになるにつれ、毎回重いウェブページを扱うのではなく、それが重要になります。要求技術(ポーリング、ロングポーリング、iframeマルチパート)にかかわらず、良いパフォーマンスを持つPHPでリアルタイムメッセージングバックエンドを作成することはほとんど不可能です。

しかし、ビュー、モデル、およびコントローラを作成する開発者の視点から、PHP MVCフレームワークと比較すると、Playは非常に似ています。 PHP MVCフレームワークとPlayフレームワークの両方でコントローラメソッドまたは関数が呼び出され、このメソッドはレスポンスを返す必要があります。ビューは通常テンプレートであり、モデルは通常リレーショナルデータベースへのORMバインディングです。今、上記のリンクを https://github.com/playframework/playframework/blob/master/framework/src/play-netty-server/src/main/scala/play/core/serverを以下に移動し

1

再生は、テンプレートライフサイクルのコンセプトを持つjsp jsfなどの典型的なテンプレートベースのフレームワークではなく、もっと安らかなフレームワーク(http://en.wikipedia.org/wiki/Representational_state_transfer)です。テンプレートサポートもあります。基本的な考え方もjsonのような純粋なデータに基づいたサーバーとのやりとりがあり、dom構造の更新のためのコードのほとんどはjavascriptで書かれていて、実際にはより柔軟で多くのシンプルで効率的です。

あなたのスカラークラスにメソッドを定義し、ルートファイルにマッピングすることで、ブラウザにデータを送信するためのメソッドを簡単に作成できます。また、一般的なWeb開発プロセスのように、一般的にブラウザで実行されたときにそのメソッドへのajax呼び出しを行うpublicリソースフォルダにhtmlファイルを置きます(またはテンプレートを作成します)。私はこれがあなたが意味するファイルだと思う

2

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

プレイは、特定のポートでリスニングを開始するJavaアプリケーションです。リスニングは、さまざまなタイプのネットワークプロトコル(最も重要なHTTP)を理解するNettyライブラリを使用して行われます。 Nettyは何が起こっているのかを知ると、それをPlayフレームワークに制御します。

Play Frameworkは、グローバルファイルをルートと組み合わせて使用​​して、呼び出すアクションを決定します。

+0

/NettyServer.scala – hiren

+0

@hirenありがとう、リンクを更新しました – EECOLOR

関連する問題