web-dev-qa-db-ja.com

桟橋は複数のリクエストをどのように処理しますか

Jetty/Tomcatアプリケーションサーバーを使用してSpring Webアプリケーションを操作しているのは約2年前ですが、それでも気付かないのは、これらのサーバーで複数のリクエストがどのように処理されるかです。春はシングルトンの作成に役立つことを理解していますが、私の理解はそれに限定されています。複数のリクエストがどのように処理されるかを理解するのに役立つ優れたリソースを誰かが指摘できますか?.

30
Ankit Dhingra

これは非常に多くのレベルで答えることができるので、2日間それを見つめ続けて、どのように答えるかを理解しようとしました...それで、私はそれでちょっと高いレベルのショットを撮ります。

Jettyがリッスンするこのサーバーポートと、クライアントとサーバー側の間で作成された接続オブジェクトを取得することを目的としたいくつかのアクセプタースレッドがあります。いったんその接続が確立されると、認証などの処理を実行したり、セッションIDをプルしてセッションオブジェクトをリクエストに添付したりするなど、突堤ハンドラアーキテクチャを介して接続が流れます。次に、サーブレットハンドラー内で機能し、適切なサーブレットが見つかり、servlet-apiの処理を開始します。その時点で、少なくともservlet 2.5でservlet-apiにいる間は常に、リクエストにスレッドが割り当てられています。サーブレット3.0では、いくつかの非同期メカニズムを使用できます。または、サーブレット2.5 APIで非同期サポートを取得する方法としてjetty-continuationsを使用できます。

とにかく、これらのコネクタにスレッドを割り当てるためにサーバーが使用するスレッドプールがあります。これは、最終的にservlet-apiですべての時間を費やすスレッドです。 jetty continuations apiと新しいサーブレット3.0サポートは、スレッドを解放してプライマリスレッドプールに戻すメカニズムを提供し、他のリクエストの受け入れと処理に時間を費やすことができるようにします。

明らかに、nio apiの使用法と、突堤がこれらすべてのものを効率的に管理する方法に関連して、カバーされたものの下にはさらに多くのことが起こっていますが、おそらくこれで最初の質問に答えるのに十分です。そうでない場合は、突堤のドキュメント( http://www.Eclipse.org/jetty/documentation/current )を熟読するか、突堤のメーリングリストをご覧ください。 Webtide( http://webtide.com/blogs のブログでは、http、spdy、およびwebsocket接続の処理と処理に関連しているため、jetty-9の最適化についていくつかの議論がありました。 )。

32
jesse mcconnell