7

Playは初めてです!Webフレームワーク、およびそれがどのように機能するか、および他のWebフレームワークとどのように比較されるかを理解するために、Play!でトレースできるようにしたいと思います。ソースコード、最初から最後までのリクエストのライフサイクル。Play!のScala実装を使用します。

私の経験のほとんどはPHPフレームワークに関するものであるため、Webルートディレクトリのindex.phpファイルから始めて、含まれているconfig / bootstrappingスクリプト、依存性注入処理、要求ルーティング、アクションディスパッチ、そして最後に読み進めることに慣れています。ビュー/応答レンダリング。

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

4

3 に答える 3

3

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

PHP は従来の「CGI に似た」パラダイムを使用します。つまり、単一の HTTP リクエストを処理するためにプログラムが開始され、リクエストの処理が終了するとプログラムは終了します。CGI では、HTTP 要求を処理するために Web サーバーが外部プログラム (スクリプト) を開始し、その出力を返します。CGI は非常に遅いため、古いバージョンの PHP は CGI 専用に設計されており、新しいバージョンでは他の方法でサーバーと対話するように設計されていましたが、コアの原則は同じままでした。

Web アプリケーション テクノロジのほとんどは、別のアプローチを使用します。Web アプリケーションは 1 回開始され、その後実行され続けるため、実行中の Web アプリケーションの 1 つのインスタンスが引き続き要求を処理します (複数の要求を並行して処理できます)。PHP のように、単一のリクエストを処理した後に終了することはありません。これにより、毎回アプリケーションを起動するために必要なリソースを大幅に削減でき、作業が少し難しくなります。ほとんどのリクエスト処理はフレームワーク内に隠され、アプリはリクエストの到着時と戻り時に呼び出されるコントローラー メソッドのみを公開する必要があるためです。応答。

また、柔軟性が向上します。たとえば、バックグラウンド処理を Web アプリ内で直接開始でき、外部サーバー プロセスは必要ありません。Play には、これに非常に便利な Akka ライブラリがあります。

重い Web ページを毎回提供するのではなく、Ajax と REST のアプローチを使用する Web アプリケーションがますます重要になっています。また、リクエスト テクノロジー (ポーリング、ロング ポーリング、iframe とマルチパート) に関係なく、パフォーマンスの良いリアルタイム メッセージング バックエンドを PHP で作成することはほとんど不可能です。

しかし、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 アプリケーションです。リッスンは、さまざまな種類のネットワーク プロトコル (最も重要なのは HTTP) を理解する Netty ライブラリを使用して行われます。Netty が何が起こっているかを知ると、Play フレームワークに制御が渡されます。

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

于 2013-02-08T07:45:21.477 に答える
1

Play は、リクエスト ライフサイクルの概念を持つ jsp jsf などの典型的なテンプレート ベースのフレームワークではなく、より安らかなフレームワーク ( http://en.wikipedia.org/wiki/Representational_state_transferを参照) ですが、テンプレートのサポートも備えています。基本的な考え方は、json のような純粋なデータに基づいてサーバーと対話することであり、dom 構造を更新するためのコードのほとんどは JavaScript で記述され、実際にはより柔軟で、はるかにシンプルで効率的なクライアントでのみ実行されます。

実際には、scala クラスでメソッドを定義し、それをルートファイルにマッピングすることで、ブラウザにデータを送信するためのメソッドを単純に作成するだけです。また、一般的な Web 開発プロセスと同様に、html ファイルをパブリック リソース フォルダーに配置 (またはテンプレートを作成) します。これは、通常、ブラウザーで実行されたときにそのメソッドへの ajax 呼び出しを行います。

于 2013-02-08T03:05:21.290 に答える