代码之家  ›  专栏  ›  技术社区  ›  Genry

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

  •  1
  • Genry  · 技术社区  · 17 年前

    我使用的是JBoss 4.0.4 GA,它有Tomcat Servlet容器5.5。 我还将IIS 6.0重定向到这个JBoss。(通过IIS tomcat连接器,该连接器在IIS中用作ISAPI筛选器)。 一切正常,已按所述配置工作人员。

    以下是连接器的workers.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层发送)。 这会导致严重的速度减慢,因为应用程序是在广域网上工作的。(对于每个闭合的套接字,需要建立另一个套接字,这需要500毫秒)。

    当直接连接到JBoss web服务器时,这种情况不会发生,当连接到IIS的同一web服务器实例上的不同虚拟目录时,也不会发生(即IIS中的Keep-Alive也已配置)。

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

    你知道连接器中是否有错误,或者我的配置有问题吗?

    提前感谢,
    亨利。

    2 回复  |  直到 17 年前
        1
  •  1
  •   Genry    17 年前

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

    在1.2.27之前,这是IIS连接器的行为(IIS强制所有 ISAPI扩展实现了自己的HTTP保持活动,以及IIS连接器 没有这样做)。

    在1.2.27中,有对HTTP 1.1分块的实验性、构建时支持 编码,这应该允许持久连接。 (我在生产系统中使用了大约4年的几乎相同的代码 多年来,但在JK代码库中,它应该被视为实验性的,直到 稳定了一段时间)。

    从其中一个下载镜像中抓取分块二进制文件,并阅读如何 在1.2.27发行说明中配置分块编码(您必须获得 正确构建,并在配置中启用它)。 您可以通过调试日志验证连接器是否使用分块编码 打开,TCP/Wireshark跟踪应显示正在重用的连接。

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

    所以,我做了什么:

    1. 将isapi_redirect.dll放在支持分块的位置。
    2. 使用以下内容配置了isapi_redirect.properties:

      enable_chunked_encoding=1

    3. 已重新启动IIS。

        2
  •  0
  •   Eddie    17 年前

    IIS可能正在关闭套接字。JBoss和IIS之间的连接 应该 与HTTP套接字是否被持久化无关。确保IIS配置为支持持久HTTP/1.1套接字。

    但是,您指出IIS中的另一个虚拟目录没有同样的问题。这可能是出现问题的特定虚拟目录的问题。然而,它 可能会 也可以是IIS/Tomcat连接器中的某个东西。

    要调查它是否是IIS/Tomcat连接器,请尝试设置

    worker.jboss0_ajp13.连接工具大小=10 worker.jboss0_ajp13.连接工具超时=600

    看看这是否有什么不同。看见 Tomcat Workers Docs (包括底部的“示例worker.properties”部分)。看看上面提到的参数是否对你有帮助。