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

Pra*_*rya 6 jboss tcp http persistent

观察结果:

  • 我的Web应用程序正在JBoss中运行。

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

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

事实:

  • JBoss HTTP协议设置为1.1。

  • 我已经检查过FF,IE9和Chrome-所有浏览器都执行相同的操作。

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

我要完成的工作

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

在这一点上,我不确定该问题应该附加什么代码,配置详细信息或日志,但是如果您让我知道,我会提供。任何帮助都将受到赞赏。

ps从标题来看,该线程似乎很有希望,TCP连接不会通过HttpURLConnection再次用于HTTP请求,但它主要处理客户端。

Pra*_*rya 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>
Run Code Online (Sandbox Code Playgroud)

这成功了(好吧,几乎)。现在,浏览器的第一次“单击”会生成大约 4 个 TCP 连接 - 不确定该数字的原因,因为每次单击都会生成 >=7 个 http 请求。但所有后续点击,如果在 ttl 周期(15 秒)内执行,则不会生成额外的 TCP 连接。我想,正如菲利普建议的那样,进行更彻底的调查会揭示一些东西。但此时我必须继续前进。因此,我暂时将这个问题标记为已回答。如果以后需要的话我会重新打开它。