一尘不染

http响应完成后,Tomcat / IIS关闭套接字

tomcat

我正在使用具有Tomcat Servlet容器5.5的JBoss 4.0.4 GA。我也将IIS 6.0重定向到了这个JBoss。(通过IIS
tomcat连接器,该连接器在IIS中用作ISAPI筛选器)。一切正常,按说明配置工作器。

这是连接器的worker.properties文件的一部分:

#
# Defining a worker named ajp13 and of type ajp13
# Note that the name and the type do not have to match.
#
worker.jboss0_ajp13.port=8009
worker.jboss0_ajp13.type=ajp13
worker.jboss0_ajp13.host=localhost
worker.jboss0_ajp13.socket_keepalive=1
worker.jboss0_ajp13.socket_timeout=300

但是,当通过IIS(端口80)连接到应用程序时,对于HTTP请求的每个完成的HTTP响应,套接字都是关闭的(FIN在TCP层上发送)。由于应用程序正在通过WAN运行,因此这会导致严重的速度下降。(对于每个闭合的插座,需要建立另一个插座,这需要500毫秒)。

直接连接到JBoss
Web服务器时不会发生这种情况,而在IIS的同一个Web服务器上连接到另一个虚拟目录时也不会发生这种情况(即,还配置了IIS中的Keep-Alive)。

最新版本的tomcat IIS连接器会发生这种情况。

您知道连接器中是否有错误,还是我的配置有问题?

预先感谢
亨利。


阅读 293

收藏
2020-06-16

共1个答案

一尘不染

我在Bugzilla中为tomcat IIS重定向器提交了一个错误,这就是我得到的答案:

直到1.2.27,这都是IIS连接器的行为(IIS强制所有ISAPI扩展实现自己的HTTP保持活动,而IIS连接器没有执行此操作)。

在1.2.27中,对HTTP 1.1块编码进行了实验性的,构建时的支持,该编码应允许持久连接。
(大约4年以来,我一直在生产系统中使用几乎相同的代码,但是应该在JK代码库中将其视为试验性的,直到一段时间稳定为止)。

从一个下载镜像中获取-chunked二进制文件,并在1.2.27发行说明中了解如何配置分块编码(您必须获得正确的构建,并在配置中启用它)。
您可以验证连接器正在使用调试调试登录的分块编码,并且TCP / Wireshark跟踪应显示正在重用的连接。

如果您仍然处于关闭状态,并且日志显示连接器正在尝试(或应该尝试)分块编码,那么最好在用户列表上进行讨论,然后在重新打开Wireshark跟踪+连接器调试日志后再打开肯定有问题。

所以,我做了什么:

  1. 将isapi_redirect.dll带有分块支持。
  2. 使用以下配置了isapi_redirect.properties:

enable_chunked_encoding=1

  1. 重新启动IIS。
2020-06-16