Netty之 windows下使用TCP keepalive

TCP保活机制说明

在TCP中有一个Keep-alive的机制可以检测死连接,原理很简单,TCP会在空闲了一定时间后发送数据给对方:

  1. 如果主机可达,对方就会响应ACK应答,就认为是存活的。
  2. 如果可达,但应用程序退出,对方就发RST应答,发送TCP撤消连接。
  3. 如果可达,但应用程序崩溃,对方就发FIN消息。
  4. 如果对方主机不响应ack, rst,继续发送直到超时,就撤消连接。这个时间就是默认的二个小时。

TCP保活的目的:

就是为了保证长连接的可靠性,可以通过自己定义的探测频率,对长期无数据交互的长连接进行通道探测,保证连接的可靠和通畅。

TCP保活的优点:

  1. 在代码层面只需要打开或者关闭保活的开关就可以使用
  2. 不需要对方进行任何的回复或者解析,不会增加对方的负担,尤其是在与硬件通信时,不会增加多余的心跳包收发

Windows下TCP KeepAlive 的参数设置

  1. KeepAliveTime: 连接创建之后,经过一段静默时间开始发送keepalive的探测包,KeepAliveTime就代表静默时间长度,单位是ms
    缺省情况下,如果空闲连接在7200000毫秒(2小时)内没有活动,系统就会发送保持连接的消息。 通常建议把该值设
    为1800000毫秒,从而丢失的连接会在30分钟内被检测到。
    具体操作:
    浏览至HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters注册表子键,在Parameters
    子键下创建或修改名为KeepAliveTimeREG_DWORD

  2. KeepAliveInterval:keepAlive没有收到回复之后,重复发送keepAlive的时间间隔,KeepAliveInterval就代表未收到回复的探测时间
    间隔,单位是ms

    缺省情况下,在未收到响应而重新发送“保持连接”的信号之前,系统会等待1000毫秒(1秒),可以根据具体需求修

    具体操作:
    浏览至HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters注册表子键,在
    Parameters子键下创建或修改名为KeepAliveIntervalREG_DWORD值。

  3. TcpMaxDataRetransmissions:在KeepAlive未收到回复之后,重复发送keepAlive的次数,TcpMaxDataRetransmissions就代表这个
    重发次数

       缺省情况下,系统会重新发送未返回应答的数据段10次,可以根据具体需求修改
    具体操作:
       浏览至HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters注册表子
       键,在Parameters子键下创建或修改名为TcpMaxDataRetransmissions的REG_DWORD值,该值的范围
       是从0到4294967295,缺省值为5,根据实际情况进行设置。
    实际测试时发现,windows下修改重发次数根本就没有效果,系统依然会默认发送10次,所以想缩短探测时常,只能在参数1和参数2进行修改

Netty打开TCP KeepAlive的开关

bootstrap.childOption(ChannelOption.SO_KEEPALIVE,true);
bootstrap.childOption(NioChannelOption.of(StandardSocketOptions.SO_KEEPALIVE), true);
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值