netty 客户端如何能够知道服务端关闭了呢?可以根据什么来判断呢?
要检查链接是否正常,比如直接拔网线等行为,应用层是接收不到这个信号的,所以netty框架还会认为这个链接是正常的,从而产生错误。
解决方案1:
应用层增加心跳机制,如:5秒或者10秒,客户端发一个心跳包,如果超时一定时间,就认为这个链接是无效了,就需要断开
解决方案2:
服务器是在linux环境下,修改/etc/sysctl.conf文件
添加以下内容:
#表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为10秒钟。
net.ipv4.tcp_keepalive_time = 10
#如果对方不予应答,探测包的发送次数
net.ipv4.tcp_keepalive_probes = 2
#探测消息发送的频率
net.ipv4.tcp_keepalive_intvl = 2
这个是修改的linux tcp发送探测包配置的
意思是:10秒内,探测2次,间隔2秒钟
修改完成后输入以下命令生效
/sbin/sysctl -p /sbin/sysctl -w net.ipv4.route.flush=1
这样设置完成以后,每次客户端断开连接后7,8秒后会执行以下方法
linux 查看 tcp keepalive时间
cat /proc/sys/net/ipv4/tcp_keepalive_time