我有一个用 Netty 实现的 HTTP 服务器。将消息推送到浏览器需要长轮询连接。大多数时候,服务器不会尝试关闭连接。
在 TCP session 中,如果任何一方想要关闭连接,它都会向另一方发送 FIN 数据包。如果服务器没有收到来自客户端的 FIN,在 1) 用户有硬网络故障或 2) 有人试图攻击服务器的情况下,是否保证 Netty 服务器将收到超时(或其他某种)给定时间后的异常?
如果它是真的,我不需要将 Read/WriteTimeoutHandler 添加到我的 channel 管道中,它会在计时器触发超时时关闭 channel 。我必须以任何一种方式关闭 channel ,否则我会泄漏资源。
最佳答案
is it guaranteed that the Netty server will receive a timeout (or other kind of) exception after a given time?
没有。如果套接字处于阻塞模式并且已设置读取超时,则会抛出 SocketTimeoutException
。有一个 IOException: connection reset
如果启用了 TCP keepalive 并且连接确实断开了 2 小时,则可能会发生这种情况:这不包括对等方只是静默而连接保持有效的情况.否则没有。
关于java - 如果客户端从不发送 FIN 数据包关闭连接,连接是否超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13622676/