我已经使用 Tomcat 构建了一个流媒体中继服务器。
简单的想法是:一个客户端执行 POST,另一个客户端执行 GET。servlet 生成一个 Thread 并执行简单的字节混洗,直到 InputSteam(来自 POST)为空。完成后关闭/回答两个请求。一切都很好,而且效果很好,但是:
Tomcat 似乎重用了请求对象甚至 InputStream 对象!每 10 个 POST 左右,InputStream 无法读取,因为已经关闭。仔细查看日志,我意识到之前的请求使用(并因此关闭)完全相同的 InputStream 对象。事实证明,即使是 HttpServletRequest 对象也是完全相同的。
这里发生了什么?为什么 Tomcat 会重用显然没有正确重置的对象?我已经尝试过 7.0.29 和 6.0.16 版本,同样的事情。