免责声明:有很多关于类似主题的信息。在我们的例子中,它在没有AWS ELB(Elastic Load Balancer)的情况下按预期工作,即当客户端丢弃时,ServletOutputStream.flush()抛出IOException。
设置:我们在ELB后面运行Tomcat 7(Java 1.7)的实例(HTTPS:443 - > HTTP:8080)。 servlet通过HTTP长期连接将数据流式传输到客户端。
问题:当客户端断开连接时,服务器会保留流数据,即ServletOutputStream.flush()或.write()不会抛出IOException。 ELB类型“缓冲”连接(我们可以通过IpTraf监视器看到它),所以从Tomcat方面看来它仍然存在客户端。如果没有ELB,IOException将被正确抛出,因此servlet可以停止流式传输。我们已禁用连接耗尽并将连接超时减少到1秒,我们还将Tomcat的HTTP连接器上的所有超时(包括KeepAlive)减少到几秒钟。什么都没有帮助。
问题:我们可以对ELB配置/ Tomcat / Java端做些什么来允许在此设置中进行断线检测?
答案 0 :(得分:0)
我们遇到了同样的问题(但在.NET中使用IIS)。 我们似乎已经通过从经典ELB切换到应用程序ELB来解决它。现在写入已关闭连接的输出流会产生异常,首先(在经典ELB上)它没有。
希望这可以帮助任何遇到同样问题的人