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

 

 
posted on 2022-08-15 10:41  外星猿  阅读(2403)  评论(0编辑  收藏  举报