我已经构建了一个使用Tomcat的流式中继服务器。通过Tomcat流式传输
简单的想法是:一个客户端执行POST,另一个客户端执行GET。该Servlet产生一个线程并进行简单的字节混洗,直到InputSteam(来自POST)为空。完成后关闭/回答这两个请求。一切都很好,它完美的工作,但:
Tomcat似乎重用请求对象,甚至是InputStream对象!每隔10个POST,InputStream就不能被读取,因为已经关闭。仔细看看日志,我意识到使用完全相同的InputStream对象被先前的请求使用(并因此关闭)。原来即使是HttpServletRequest对象也完全一样。
这是怎么回事?为什么Tomcat重复使用明显没有被正确重置的对象?我已经用7.0.29和6.0.16版本试过了,同样的事情。
这种事情通常发生在请求完成后保留对资源的引用时。您是否在任何地方存储对请求,响应或流的引用? – 2012-08-09 00:44:11
我没有缓存任何请求或响应对象,但事实证明,字节混排线程释放InputStream对象有点太迟了(在请求已经返回之后),所以我认为这是问题所在。虽然我同意永远不要缓存这些对象,但Tomcat回应如此糟糕的事实令人大失所望! – Daniel 2012-08-09 19:12:29