每个HTTP请求都使用单独的TCP连接

时间:2012-06-06 15:40:01

标签: http tcp jboss persistent

观察:

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

  • 每次用户点击都会因图片等原因生成> 5次HTTP请求。

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

事实:

  • JBoss HTTP协议设置为1.1。

  • 我已经通过FF,IE9和Chrome查看了 - 所有浏览器也都这样做了。

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

我想要实现的目标

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

此时,我不确定该问题应该附加哪些代码,配置详细信息或日志,但如果您让我知道,我会提供。任何形式的帮助都表示赞赏。

P.S。这个帖子似乎很有希望来自标题TCP connection is not reused for HTTP requests with HttpURLConnection,但它主要涉及客户端。

1 个答案:

答案 0 :(得分: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连接 - 不确定该数字的原因,因为每次单击都会生成&gt; = 7个http请求。但是,如果在ttl期间(15秒)内执行所有后续点击,则不会生成其他TCP连接。我想正如菲利普所建议的那样,更彻底的调查会揭示出一些东西。但此时我必须继续前进。所以,暂时我会将这个问题标记为已回答。如果将来需要,我会重新打开它。