我有一个java servlet来处理来自客户端的HTTP GET请求。处理完请求后,它会发回HTTP 200 OK,响应中包含几百个字节的数据。
有一个特定的错误情况,即客户端几乎与发送响应的时间从网络断开连接。数据由servlet写入输出流,并且刷新输出流,并且时间是这样的,即在刷新输出流时,服务器不知道客户端没有连接。 (连接被客户端和服务器之间的点突然切断,因此客户端没有机会正确关闭TCP连接 - 服务器没有看到TCP RST。)
问题是,servlet有没有办法检测到这种情况?我已经检查了两件事:
据我所知,服务器无法知道这种情况。但在我看来,它应该可能基于客户端的TCP堆栈缺乏确认。但也许这不会暴露给servlet。
不确定是否重要,但我使用的是Tomcat 7.0.26。
答案 0 :(得分:0)
它不能。响应可以由容器完全缓冲,只有在Servlet代码退出后才会写入。
您不得依赖于在您的应用程序中收到响应的客户。这称为幂等性:查找它。