私は、jetty/tomcat アプリ サーバーを使用して Spring Web アプリケーションを約 2 年間使用してきましたが、これらのサーバーで複数の要求がどのように処理されるかはまだわかりません。春がシングルトンの作成に役立つことは理解していますが、私の理解はそれだけに限定されています。複数のリクエストがどのように処理されるかを理解するのに役立つ優れたリソースを教えてください。
1 に答える
これは非常に多くのレベルで答えることができます私はそれをどのように答えるかを理解しようとして2日間それを見つめてきました...それで私はそれでちょっとハイレベルなショットを撮ります。
jettyがリッスンするこのサーバーポートと、クライアント側とサーバー側の間で作成された接続オブジェクトを取得することを目的とするいくつかのアクセプタースレッドがあります。その接続が確立されると、おそらく認証などを実行する、またはセッションIDをプルしてセッションオブジェクトをリクエストにアタッチするなどの処理を行うJettyハンドラアーキテクチャを通過します。次に、サーブレットハンドラーに組み込まれ、適切なサーブレットが検出され、サーブレットAPIの処理が開始されます。その時点で、少なくともサーブレット2.5では、servlet-apiにいる間は常にスレッドがリクエストに割り当てられています。サーブレット3.0では、いくつかの非同期メカニズムを使用できます。または、サーブレット2.5APIで非同期サポートを取得する方法としてjetty-continuationsを使用できます。
とにかく、サーバーがこれらのコネクタにスレッドを割り当てるために使用するスレッドプールがあります。これらのコネクタは、最終的にはサーブレットAPIですべての時間を費やしているスレッドです。桟橋継続APIと新しいサーブレット3.0サポートは、スレッドをプライマリスレッドプールに解放するメカニズムを提供するため、他のリクエストの受け入れと処理に時間を費やすことができます。
nio apiの使用法と、jettyがこれらすべてを効率的に管理する方法に関連して、明らかに多くのことが行われていますが、おそらくこれで最初の質問に答えることができます。そうでない場合は、桟橋のドキュメント(http://www.eclipse.org/jetty/documentation/current)をよく読むか、桟橋のメーリングリストを参照してください。Webtide( http://webtide.com/blogs )のブログで、http、spdy、およびWebSocket接続の処理と処理の裏側に関連するjetty-9の最適化についていくつかの議論がありました。