7

所見:

  • 私の Web アプリは JBoss で実行されています。

  • ユーザーが 1 回クリックするたびに、画像などが原因で 5 つ以上の HTTP リクエストが生成されます。

  • サーバーで netstat を実行すると、HTTP リクエストごとに新しい TCP 接続が開かれていることがわかります (基本的に、ポート 80 のクライアント IP からの TCP 接続の総数を調べています)。

事実:

  • JBoss HTTP プロトコルは 1.1 に設定されています。

  • FF、IE9、および Chrome で確認しましたが、すべてのブラウザで同じことが行われます。

  • 2 つのテスト環境があります。1 つは Windows7 で実行され、もう 1 つは CentOS で実行されます。両方で同じ動作が見られます。

私が達成しようとしていること

  • 永続的な TCP 接続。これにより、a) ユーザー エクスペリエンスが向上し、b) サーバーの負荷が軽減されることが期待されます。

この時点で、どのコード、構成の詳細、またはログを質問に添付すればよいかわかりませんが、お知らせいただければ提供します。どんな種類の助けも大歓迎です。

ps このスレッドは、タイトルからして有望に思えましたTCP 接続は HttpURLConnection を使用した HTTP リクエストに再利用されませんが、主にクライアント側を扱います。

4

1 に答える 1

1

私はこれに対する解決策を見つけたと思います。ポインタと提案をありがとう。彼らは本当に助けになりました。

パート 1: Firefox で HttpFox プラグインを使用して、応答ヘッダーを確認しました。Philippe が疑ったように、Connection ヘッダーの値は「close」でした。

パート 2: 独自のフィルターにコード行を追加して応答ヘッダーを変更しても効果がありませんでした。そこで、org.jboss.web.tomcat.filters.ReplyHeaderFilter クラスを使用するために、jbossWebService.jar をダウンロードして WEB-INF/lib ディレクトリに追加しました。(JBoss 7 より前では、このパッケージはデフォルトで JBoss に含まれていたようです。) web.xml に以下を追加しました。

<filter>

<filter-name>CommonHeadersFilter</filter-name>

<filter-class>

org.jboss.web.tomcat.filters.ReplyHeaderFilter</filter-class>

<init-param>

     <param-name>Connection</param-name>

     <param-value>keep-alive</param-value>

</init-param>

</filter>

これでうまくいきました(ほぼ)。現在、ブラウザからの最初の「クリック」により、約 4 つの TCP 接続が生成されます。1 回のクリックごとに >=7 の http 要求が生成されるため、その数の理由についてはわかりません。ただし、ttl 期間 (15 秒) 内に実行された場合、後続のすべてのクリックは、追加の TCP 接続を生成しません。フィリップが提案したように、より徹底的な調査を行えば、何かが明らかになると思います。しかし、この時点で私は先に進まなければなりません。そのため、当分の間、この質問を回答済みとしてマークします。今後、必要があれば再開します。

于 2012-06-08T21:06:57.237 に答える