7

观察:

  • 我的网络应用程序在 JBoss 中运行。

  • 由于图像等原因,每次用户单击都会生成 >5 个 HTTP 请求。

  • 在服务器上运行 netstat 表明正在为每个 HTTP 请求打开一个新的 TCP 连接(基本上我正在查看端口 80 上来自客户端 IP 的 TCP 连接总数)。

事实:

  • JBoss HTTP 协议设置为 1.1。

  • 我检查过 FF、IE9 和 Chrome——所有浏览器都这样做。

  • 我有两个测试环境——一个在 Windows7 上运行,另一个在 CentOS 上运行。我在两者中都看到了相同的行为。

我想要完成的事情

  • 持久的 TCP 连接,因为希望这会 a) 增强用户体验 b) 减少服务器上的负载

在这一点上,我不确定我应该将哪些代码、配置详细信息或日志附加到问题中,但如果你让我知道,我会提供。任何形式的帮助表示赞赏。

ps 从标题TCP connection is not reused for HTTP requests with HttpURLConnection看来,这个线程看起来很有希望,但它主要处理客户端。

4

1 回答 1

1

我想我已经找到了解决方案。感谢您的指点和建议。他们真的有帮助。

第 1 部分:我使用 Firefox 中的 HttpFox 插件查看响应标头。Philippe 怀疑 Connection 标头的值为“close”。

第 2 部分:在我自己的过滤器中添加一行代码来更改响应标头没有帮助。所以我下载并添加了 jbossWebService.jar 到 WEB-INF/lib 目录,以便使用 org.jboss.web.tomcat.filters.ReplyHeaderFilter 类。(在 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 连接——不确定这个数字的原因,因为每次点击都会产生 >=7 个 http 请求。但是,如果在 ttl 周期(15 秒)内执行所有后续点击,则不会生成额外的 TCP 连接。我想按照菲利普的建议,进行更彻底的调查会揭示一些东西。但在这一点上,我必须继续前进。因此,我暂时将这个问题标记为已回答。如果将来需要,我会重新打开它。

于 2012-06-08T21:06:57.237 回答