一尘不染

7.0.27版以后,Tomcat不会进行大量流式处理吗?

tomcat

我发现tomcat版本$ subject之后我的flex应用程序不再起作用。请帮助我解决这个问题。我尝试了很多事情都没有成功。

这是我的配置。

Blaze-4.x Tomcat-最新-7.0.32 Java 7

应用程序挂起,没有任何错误或任何东西。从7.0.32起可以再次使用。我检查了tomcat发行说明(http://tomcat.apache.org/tomcat-7.0-doc/changelog.html),并将问题隔离到了Coyote
jar文件中。

当我将Coyote.jar从7.0.27版本替换为7.0.32时,它可以正常工作。

以下是土狼的变化(http://tomcat.apache.org/tomcat-7.0-doc/changelog.html

52858: Correct fix for high CPU load (fhanik)
53138: Broken Sendfile on SSL introduced in 7.0.27 (fhanik)
52055: Additional fix required to ensure that InputFilters are recycled between requests. (markt)
53061: Fix a problem in the NIO connector whereby if the poller was under low but consistent load (>1 request/per second and always less than 1 second between requests) timeouts never took place. (markt)
53063: When using an Executor with BIO, use the executor's maxThreads as the default for maxConnections. (markt)
53119: Prevent buffer overflow errors being reported when a client disconnects before the response has been fully written from an AJP connection using the APR/native connector. (markt)
53169: Allow developers to avoid chunked encoding for a response of unknown length by setting the Connection: close header. Based on a patch suggested by Philippe Marschall. (markt)
53173: Properly count down maxConnections (fhanik)
 Update default value of pollerThreadCount for the NIO connector. The new default value will never go above 2 regardless of available processors. (fhanik)
 Allow to retrieve the current connectionCount via getter from the endpoint and as JMX attribute of the ThreadPool mbean. (rjung)
 Correct an edge case where Comet END events were not send to connected clients when the Tomcat connector was stopped. (markt)
53406: Fix possible stack overflow on connection close when using Comet. (fhanik)
 Improve InternalNioInputBuffer.parseHeaders(). (kkolinko)
 Implement maxHeaderCount attribute on Connector. It is equivalent of LimitRequestFields directive of Apache HTTPD. Default value is 100. (kkolinko)

任何猜测/想法都会有所帮助。提前致谢!


阅读 273

收藏
2020-06-16

共1个答案

一尘不染

我认为这可能是问题的原因:

53169:允许开发人员通过设置Connection:close标头来避免对未知长度的响应进行分块编码。基于Philippe Marschall建议的补丁。(市场)

从BaseStreamingHTTPEndPoint.java中的BlazeDS(4.0.0.14931)代码中:

718: res.setHeader("Connection", "close");

所以,我写了一个简单的过滤器:

@Override
public void doFilter(ServletRequest request, ServletResponse response,
        FilterChain chain) throws IOException, ServletException {
    chain.doFilter(request, new HttpServletResponseWrapper(
            (HttpServletResponse) response) {
        public void setHeader(String name, String value) {
            if (!("Connection".equalsIgnoreCase(name) && "Close"
                    .equalsIgnoreCase(value))) {
                super.setHeader(name, value);
            }
        }
    });
}

使用web.xml中的配置:

<filter>
    <filter-name>MessageBrokerHack</filter-name>
    <filter-class>
        com.vivimice.testing.MessageBrokerHack
    </filter-class>
</filter>
<filter-mapping>
    <filter-name>MessageBrokerHack</filter-name>
    <url-pattern>/messagebroker/*</url-pattern>
</filter-mapping>

然后问题解决了。

在AIR客户端(Flex 4.5.1)和Tomcat 6.0.36&7.0.35上进行了测试

注意:尚未在常规RemoteObject调用上进行测试。

2020-06-16