【发布时间】:2013-10-30 15:29:57
【问题描述】:
我在 JBoss 5.1 上有简单的 servlet。 写入响应时,如果连接关闭,则没有异常。 连接因读取超时而关闭,来自外部。
JBoss 收到 FIN、ACK、ACK 应答,几秒钟后发送我的响应(PSH、ACK)并收到 RST。
如何在 servlet 中确定连接已关闭和/或响应未成功写入?
【问题讨论】:
-
写入大数据 (500-600 Kb) 以响应我收到 java.net.SocketException: Broken pipe
-
找到解决方案。我将 JBoss 连接器的 socketBuffer 设置为 -1,默认为 9000 字节。这将如何影响 Jboss 的性能?
-
关闭缓冲区仅对本地连接有帮助。因为没有将缓冲区响应拆分为 2 部分 - header 和 body,并且 JBoss 在发送 header 后接收 RST,所以我们在发送 body 时出现异常。在网络上,JBoss 发送 3 个数据包(header、body、FIN)并接收三个 RST。